def sum_two(arry, sum)
p check_sums(sum, arry[0], arry[1..arry.length - 1])
end
def check_sums(target, first_num, remaining_nums)
result = []
return result if remaining_nums == []
remaining_nums.each do |n|
if first_num + n == target
result << [first_num, n]
end
end
check_sums(target, remaining_nums[0], remaining_nums[1..remaining_nums.length - 1])
end
my_arry = [2,4,6,1,3,5,7]
my_sum = 6
sum_two(my_arry, my_sum)
以上是我对面试问题的解答。但是,输出始终是一个空数组([]
)。我的问题看似简单,因为我只需要返回最终结果数组,所以我必须忽略一些明显的东西。基本上,我无法弄清楚为什么它的打印阵列是空的,因为我觉得这个逻辑很有把握。发回正确的价值
UPDATE:
下面是我的解决方案的更新版本中,我包装在类中的方法,使产生一个实例变量,这样我可以在整个递归调用保持其状态。感谢@BenE提到我每次递归调用都要重置值。这真的为我清除它!这是我的新的解决方案:
class SumTwo
@result = []
def self.sum_two(arry, sum)
p SumTwo.check_sums(sum, arry[0], arry[1..arry.length - 1])
end
def self.check_sums(target, first_num, remaining_nums)
return @result if remaining_nums == []
remaining_nums.each do |n|
if first_num + n == target
@result << [first_num, n]
end
end
check_sums(target, remaining_nums[0], remaining_nums[1..remaining_nums.length - 1])
@result
end
end
my_arry = [2,4,6,1,3,5,7]
my_sum = 6
SumTwo.sum_two(my_arry, my_sum)
应该是递归的解决办法吗? – 2014-11-06 01:13:48
面试问题是什么? – seph 2014-11-06 01:15:01
@seph根据我的理解,问题是要求他检查数组“my_arry”中的两个数字的总和是否等于“my_sum”。如果两个数字相等,那么他将返回这两个数字 – 2014-11-06 01:23:11