このアルゴリズムの正式な名前があり、これを解決するためのエレガントな方法は何でしょうか。問題は、たとえば、配列が与えられた[3, 6, 2]
場合、、、、、で始まるすべての数値を出力すると、000
次の数値は「キャリーオーバー」して、になり、そして。車の走行距離計に似ていますが、代わりにもう一方の端の桁を大きくしても問題ありません。は2桁目の最大数です。は3桁目の最大数です。したがって、プログラムは最後の番号として出力する必要があります。100
200
300
010
110
6
2
362
私は以下の解決策を思いついたが、それはあまりにも厄介に見える。それで、私はエレガントな解決策があるかどうか疑問に思います、そしてこの問題と解決策は実際にそれを解決するための正式な名前と既知のエレガントな解決策を持っていますか?
再帰は実際には可能ですが、再帰がすべての数値の配列を返す場合、入力配列に10個または15個の数値が含まれていると、結果の配列が指数関数的に大きくなる可能性があるため、アルゴリズムはそれを処理できないと思います。本当に大きくなり、多くのメモリを消費する可能性があります。
# In Ruby
def print_all_numbers(arr_ranges)
arr = arr_ranges.map { 0 } # convert it to [0, 0, 0]
while (true)
incrementer_index = 0
puts arr.join
arr[incrementer_index] += 1
while arr[incrementer_index] > arr_ranges[incrementer_index]
arr[incrementer_index] = 0
incrementer_index += 1
return if incrementer_index >= arr.length
arr[incrementer_index] += 1
end
end
end
print_all_numbers([3, 6, 2])