如果我有一个可变长度[n]的整数数组,则可以迭代它,以便每个值仅在下一个值达到n-1时递增。
例如,如果n = 3:
int[] intArray = {0, 0, 0};
增加intArray [],使得:
intArray = {0, 0, 1}
intArray = {0, 0, 2}
intArray = {0, 1, 0}
intArray = {0, 1, 1}
intArray = {0, 1, 2}
intArray = {0, 2, 0}
intArray = {0, 2, 1}
intArray = {0, 2, 2}
intArray = {1, 0, 0}
intArray = {1, 0, 1}
...
intArray = {2, 2, 2}
答案 0 :(得分:4)
有助于思考问题中的模式 - 有时候他们会建议可能很容易分解和实施的一般解决方案。
在这种情况下,数组内容的作用类似于base-n数字(具体示例中为base-3)。所以你可以考虑一个递增任意数字基的算法,一旦你继续编码就可以了。
一个“递增”base-n数字的函数将从递增最低有效数字并检查溢出开始。在base-10中,我们将保留0,并将1带到下一个最高有效位。在任意数字基数中,这与将数字重置为零并递增下一个最高有效数字相同。
有特殊情况需要考虑。如果要求您在数字基础中增加“maxint”,例如{2, 2, 2}
?你会添加另一个有效数字吗?你会将值固定在“maxint”,还是换行到0
?你会抛出异常吗?除非你已经有规范,否则没有“正确”的答案。
在伪代码中,这是一个想法:
increment( digits , base ) {
for (place=digits.length - 1; place >= 0; place-- ) {
digit = digits[place]++; // increment digit in this place
if (digit < base)
break;
else
digit = 0; // overflowed, so "wrap" to zero, increment next place
}
return digits;
}