我有以下代码。方法sum_to_n?
采用整数数组arr
和整数n
作为参数,如果true
中的任何两个元素总和为arr
,则返回n
。对于空true
,它应返回arr
,而n
为零,但会一直返回false
。
def sum_to_n?(arr, n)
hash = Hash.new(0)
arr.each do |val|
if hash.key? val
return true
else
hash[n-val] = val
end
end
return false
end
我做错了什么?
答案 0 :(得分:7)
更短的版本:
def sum_to_n?(arr, n)
(arr.empty? && n.zero?) || arr.permutation(2).any? { |a, b| a + b == n }
end
答案 1 :(得分:2)
您的代码(几乎)正确,但您的期望是错误的。当有两个(或一个)元素加起来true
时,您的代码会返回n
。如果传递一个空数组,那么就不会有任何元素加起来n
(因为首先没有数组中的元素)。因此,您得到false
。
如果您希望它为空数组返回true
,那么这将是一种不符合逻辑的异常行为。你必须提出一个条件,如
return true if arr.empty?
代码。