我想将具有N个值并表示整数的int数组的最后一位递增(+1)。每个值都是介于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循环,但是我无法达到预期的结果。
答案 0 :(得分:0)
实际上,您真正想要实现的是“ PLUS 1”。如果您的N <= 10,则直接使用int。如果您的N <= 10,请使用long。
当然,如果您N真的需要很大。尝试为数字实现一个类吗?
答案 1 :(得分:0)
解决此问题的一种方法是使用递归。
这个想法是要跟踪要递增的数组元素。您从索引r$run(port = 6000)
处的元素开始,将其递增,如果达到10,则将其设置为0,然后对索引array.length - 1
处的元素进行相同的操作,依此类推。
还要注意,由于您正在方法中更改数组,因此不必返回数组。
array.length - 2
答案 2 :(得分:0)
一种可能的解决方案是向后遍历数组,并在需要时递增:
private static int[] incrementArrayDigits(int[] fourDigits) {
for (int i = fourDigits.length - 1; i >= 0; i--) {
fourDigits[i]++; // increment
if (i > 0) { // cut result to 0-9, if not the first value
fourDigits[i] %= 10;
}
if (fourDigits[i] > 0) { // if no carry is passed break
break;
}
}
return fourDigits;
}
答案 3 :(得分:0)
这是我想出的解决方案。希望对您有帮助!
public void incrementArrayDigits(int[] arr) {
if(arr == null)
return;
int currIndex = arr.length - 1;
while(currIndex > -1){
arr[currIndex]++;
if(arr[currIndex] < 10)
return;
else if (currIndex < 1)
return;
else
arr[currIndex--] = 0;
}
}