代码工作,但感觉非常蛮力,建议?
代码的目标是提供数组长度,然后尽可能快地生成具有该数组长度的所有可能的唯一二进制组合.
码:
class Array
def sequence(i = 0, *a)
return [a] if i == size
self[i].map {|x|
sequence(i+1, *(a + [x]))
}.inject([]) {|m, x| m + x}
end
end
[(0..1),(0..1),(0..1)].sequence
Run Code Online (Sandbox Code Playgroud)
输出:
[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)
permutation和repeated_permutation是内置的,所以你可以这样做:
def sequence(n)
[0, 1].repeated_permutation(n).to_a
end
p sequence(3) #=>[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]
Run Code Online (Sandbox Code Playgroud)