定义一个方法`sum_to_n?`

时间:2013-10-13 23:03:52

标签: ruby arrays

我有以下代码。方法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

我做错了什么?

2 个答案:

答案 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?

代码。