【发布时间】:2020-05-26 23:48:21
【问题描述】:
我想递增 (+1) 具有 N 个值并表示整数的 int 数组的最后一位。每个值都是 0-9 之间的单个数字。
逻辑是这样的:如果要增加的数字是9,它必须变成0,并且下一个(从右到左)必须增加1。如果你到达第一个数字数组,它是 9,这将变成 10。示例:
[3,4,5,6] -> [3,4,5,7]
[3,9,2,9] -> [3,9,3,0]
[3,4,9,9] -> [3,5,0,0]
[9,9,9,9] -> [10,0,0,0]
我有同样的练习,但只有 4 个数字,所以逻辑很简单:
int[] incrementArrayDigits(int[] fourDigits) {
if (fourDigits[3] != 9) {
fourDigits[3]++;
} else if (fourDigits[2] != 9) {
fourDigits[3] = 0;
fourDigits[2]++;
} else if (fourDigits[1] != 9) {
fourDigits[3] = 0;
fourDigits[2] = 0;
fourDigits[1]++;
} else if (fourDigits[0] != 9) {
fourDigits[3] = 0;
fourDigits[2] = 0;
fourDigits[1] = 0;
fourDigits[0]++;
}
if (fourDigits[0] == 9 && fourDigits[1] == 9 && fourDigits[2] == 9 &&
fourDigits[3] == 9) {
fourDigits[1] = fourDigits[2] = fourDigits[3] = 0;
fourDigits[0] = 10;
}
System.out.println(Arrays.toString(fourDigits));
return fourDigits;
}
我试图解决 N 个数字的问题,获取数组的长度,然后使用 for 循环,但我无法达到预期的结果。
【问题讨论】:
-
提示:保留要递增的数组元素的索引,从
array.length - 1开始。在循环中,要么递增(然后中断),要么设置为 0 并减少索引。如果索引最终为负数,那么您已经经历了所有排列... -
请向我们展示您尝试实现的循环。
-
想想如何在纸上做长加法。从最右边的数字开始,添加,如果需要,携带一个,然后转到下一个数字。请记住,您可能需要在末尾添加一个额外的数字作为最高有效数字(最左边)。
-
这是探索递归奇迹的绝佳例子。