-1

说,我有一个数组:

a = [1,2]

n = 3

我想要这样的输出:

[[1, 1, 1], [1, 1, 2], [1, 2, 1], [1, 2, 2], [2, 1, 1], [2, 1, 2], [2, 2, 1], [2, 2, 2]]

n这是array 中元素长度的所有可能组合a

最重要的是我使用的是 ruby​​ 1.8.7

4

2 回答 2

5
a.repeated_combination(n).to_a
于 2013-07-24T06:43:22.227 回答
1

使用前请详细测试:

x = [1,0]
n = 3

def perm(a, n)
  l = a.length
  (l**n).times do |i|
    entry = []
    o = i
    n.times do
      v = o % l
      entry << a[v]
      o /= l
    end
    yield(i, entry)
  end
end

perm(x, n) do |i, entry|
  puts "#{i} #{entry.reverse.inspect}"
end

印刷

0 [0, 0, 0]
1 [0, 0, 1]
2 [0, 1, 0]
3 [0, 1, 1]
4 [1, 0, 0]
5 [1, 0, 1]
6 [1, 1, 0]
7 [1, 1, 1]
于 2013-07-24T09:52:29.427 回答