我想编写一个由数字数组表示的计数器,从:
[0, 0, 0]
这里的限制是,每个位置都有不同的上限,所以它不一定是 9 或其他东西,但它是给定的。例如:
[4, 2, 1]
这将导致以下递增序列:
[0, 0, 0]
[0, 0, 1]
[0, 1, 0]
[0, 1, 1]
[0, 2, 0]
[0, 2, 1]
[1, 0, 0]
.
.
.
当然,我可以想到一个使用模数并将每个结转添加到下一个位置的解决方案。但是有人知道如何有效地实现这一点,分别使用漂亮的 Ruby 语法而不会使它过于混乱吗?
那是我天真的实现:
max = [10, 1, 1, 1, 10]
counter = [0, 0, 0, 0, 0]
i = counter.length-1
while counter != max do
counter[i] = counter[i] + 1
while counter[i] > max[i]
counter[i] = 0
i = i - 1
counter[i] = counter[i] + 1
end
i = counter.length-1
end