我刚刚学习了Ruby,我正在做一些基本的练习问题来熟悉这门语言。我刚刚遇到这个问题: “编写一个采用数组的方法。如果是一对数字 在数组中总和为零,返回这两个数字的位置。 如果没有数字对总和为零,则返回nil。“
这是我的代码:
def two_sum(nums)
i = 0
j = 0
while i < nums.length
while j < nums.length
if nums[i] + nums[j] == 0
return [i, j]
end
j+= 1
end
i += 1
end
return nil
end
每次都返回nil。怎么了?
答案 0 :(得分:5)
j
递增时, 0
应重新初始化为i
:
while i < nums.length
while j < nums.length
if nums[i] + nums[j] == 0
return [i, j]
end
j+= 1
end
i += 1
j = 0 # Here
end
答案 1 :(得分:1)
虽然余浩回答了字面上的问题,但这是一个更Rubyish的解决方案:
def two_sum(nums)
nums.each_with_index do |x, i|
j = nums.index(-x)
return [i, j] if j
end
nil
end