在ruby中编写嵌套“for”的另一种有效方法是什么?

时间:2018-01-11 14:42:15

标签: ruby algorithm nested-loops

我从HackerRank开始练习,可以轻松解决,如下所示:

def divisibleSumPairs(n, k, ar)
  validPairs = 0
  for i in 0..ar.size-1
    for j in i+1..ar.size-1
      validPairs += 1 if (ar[i]+ar[j]) % k == 0
    end
  end
  validPairs
end

n, k = gets.strip.split(' ')
n = n.to_i
k = k.to_i
ar = gets.strip
ar = ar.split(' ').map(&:to_i)
result = divisibleSumPairs(n, k, ar)
puts result;

但那嵌套是困扰我的。在Ruby中有没有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

是。您可以使用combination类中的Array方法:

a = [1,2,3,4,5]
a.combination(2).to_a #=> [[1, 2], [1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]

然后你可以迭代这些对,所以代码应该看起来像那样(虽然没有运行它):

def divisibleSumPairs(n, k, ar)
  validPairs = 0
  ar.combination(2).each do |pair|
    validPairs += 1 if (pair[0]+pair[1]) % k == 0
  end
  validPairs
end