我想知道这个算法是否有正式名称,以及解决这个问题的优雅方法是什么:问题是——给定一个数组,比如说,打印出所有以, , ,[3, 6, 2]
开头的数字,然后下一个数字将“结转”并成为,然后。它就像汽车的里程表,只是增加另一端的数字就可以了。是第二个数字的最大数字。是第三个数字的最大数字。所以程序应该打印出最后一个数字。000
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])