数组中的数字增量

时间:2019-05-24 13:54:19

标签: java arrays

我想将具有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循环,但是我无法达到预期的结果。

4 个答案:

答案 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;
    }
}