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