我正在学习 Ruby,参加伯克利的 MOOC,并且,在这些 MOOC 的一些作业中,我们有一个练习说:
定义一个方法 sum_to_n? 它将一个整数数组和一个附加整数 n 作为参数,如果整数数组中的任何两个元素之和为 n,则返回 true。根据定义,空数组的总和应为零。
我已经创建了两种可以完成这项工作的方法,但我对它们中的任何一种都不满意,因为我认为它们不是用 Ruby 方式编写的。我希望你们中的一些人可以帮助我了解哪种方法是正确的!
我制作的第一个方法对两次迭代都使用了该each
方法,但我不喜欢这种方法的是每个数字都与其他数字相加,即使是相同的数字,做这样的事情:
arr[1, 2, 3, 4] => 1+1, 1+2, 1+3, 1+4, 2+1, 2+2, 2+3, 2+4, 3+1, 3+2... 4+3, 4+4
正如你所看到的,有很多重复的总和,我不希望这样。
这是代码:
def sum_to_n?(arr, n)
arr.each {|x| arr.each {|y| return true if x + y == n && x != y}}
return true if n == 0 && arr.length == 0
return false
end
用另一种方法,我得到了我想要的,只是几个总和而不重复任何一个,甚至不加相同的数字,但它看起来很可怕,我很确定有人会因为这样做而杀了我,但是如您所见,该方法做得很好:
arr[1, 2, 3, 4] => 1+2, 1+3, 1+4, 2+3, 2+4, 3+4
这是代码:
def sum_to_n?(arr, n)
for i in 0..arr.length - 1
k = i + 1
for k in k..arr.length - 1
sum = arr[i] + arr[k]
if sum == n
return true
end
end
end
return true if n == 0 && arr.length == 0
return false
end
好吧,我希望你们能像我尝试的那样做一个更好、更漂亮的方法。
谢谢您的帮助。