From 52bcc54086feac93d599f13ba4c5dd36b2b0af3e Mon Sep 17 00:00:00 2001 From: tdhzz Date: Mon, 20 May 2019 15:49:00 +0800 Subject: [PATCH] =?UTF-8?q?ruby=E8=A6=81=E4=BC=98=E9=9B=85=EF=BC=8C?= =?UTF-8?q?=E5=96=84=E4=BA=8E=E4=BD=BF=E7=94=A8=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruby/elegant_shit.rb | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 ruby/elegant_shit.rb diff --git a/ruby/elegant_shit.rb b/ruby/elegant_shit.rb new file mode 100644 index 0000000..4af8c90 --- /dev/null +++ b/ruby/elegant_shit.rb @@ -0,0 +1,40 @@ +# 需求: +# 输入: candidates = [2,3,6,7], target = 7, +# 所求解集为: +# [ +# [7], +# [2,2,3] +# ] + +# 一开始的实现,看起来贼乱也不好理解 + +def combination_sum(candidates, target) + result=Array.new + manage_num(candidates, target, result) + result.each {|re| re.sort!} + result.sort +end + +def manage_num(candidates, target, result, num_array=Array.new, sum=0) + if target==sum + result.push num_array + return + else + for i in 0.upto(candidates.size-1) + if target>=sum+candidates[i] + tmpNumsNew=num_array.dup + tmpNumsNew.push candidates[i] + manage_num(candidates[i..-1], target, result, tmpNumsNew, sum+candidates[i]) + end + end + end +end + + +#ruby要优雅~~~~,善于使用ruby方法 + +def combination_sum(candidates, target) + return [[]] if target == 0 + return [] if target < candidates.min + candidates.flat_map{|c| combination_sum(candidates,target - c).map {|f| [c,*f].sort } }.uniq #recur +end -- Gitee