输入:由k个正整数组成的数组I。整数将不大于100且k≤100。
输出:您的代码必须输出所有可能的阵列ö长度的非负整数的ķ其限制是0≤ö 我 ≤我我。要从一个数组到下一个数组,您可以在数组中的一个值上加上或减去1。您的代码不得两次输出相同的数组。如果要输出的不同数组的数量很大,那么您的代码应该一直持续输出直到被杀死为止。
例子
如果我是一个k个数组,那么这就是迭代所有宽度为k的格雷码的问题,除了第一个和最后一个元素不需要一步就可以到达。
如果
I = [2,1]
这样,则输出数组的一种可能的排序是(0,0),(0,1),(1,1),(1,0),(2,0),(2,1)
- 如果
I = [2,1,3]
是,则输出数组的一种可能的排序是(0,0,0),(0,0,1),(0,0,2),(0,0,3),(0,1,3),(0,1,2),(0,1,1),(0,1,0),(1,1,0),(1,1,1),(1,1,2),(1,1,3),(2,1,3),(2,1,2),(2,1,1),(2,1,0),...
。
这是一个代码挑战,用最短长度的源代码提交是成功的。不要让打高尔夫球的简短答案阻止您发布其他语言的答案。尝试用任何一种语言给出最短的答案。
这也是限制复杂性的挑战。从前一个输出数组(或第一个输出数组的程序开始)开始,每个新数组的输出都应经过O(k)时间。这意味着每个新输出数组(它们各自的长度为k)的运行时间不应大于O(k)。也就是说,应该花费与k成比例的时间,而不是例如k 2或2 k。注意,这不是每个输出的平均时间,而是每个输出阵列的最坏情况时间。
您可以假定对64位整数的所有算术可以在恒定时间内执行,就可以读取和输出它们,以及赋值,查找和更改数组中的值。
限制复杂度的结果之一是仅在程序退出时输出的解决方案是不可接受的。
n
和k
受限制时,复杂性如何工作?假设他们使用位宽达到无限大
I_i+1
?可以从0达到0I_i
吗?)