为了账号安全,请及时绑定邮箱和手机立即绑定

数组中的数字增量

数组中的数字增量

qq_花开花谢_0 2022-12-15 14:50:49
我想递增 (+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 循环的问题,但我无法达到预期的结果。
查看完整描述

4 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

解决这个问题的一种方法是使用递归。


这个想法是跟踪您正在递增的数组的哪个元素。您从 index 处的元素开始array.length - 1,递增它,如果它达到 10,则将其设置为 0,然后对 index 处的元素执行相同的操作array.length - 2,依此类推。


另请注意,由于您是在方法中更改数组,因此不必返回数组。


private static void incrementArrayDigits(int[] array, int position) {

    if (position >= array.length || position < 0) {

        return;

    }

    array[position]++;

    if (array[position] == 10 && position != 0) {

        array[position] = 0;

        incrementArrayDigits(array, position - 1);

    }

}


// usage:


int[] array = {9,9,9};

incrementArrayDigits(array, array.length - 1);

System.out.println(Arrays.toString(array));


查看完整回答
反对 回复 2022-12-15
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

这是我想出的解决方案。希望能帮助到你!


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;

    }

}


查看完整回答
反对 回复 2022-12-15
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

一种可能的解决方案是向后迭代数组并在需要时递增:


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;

}


查看完整回答
反对 回复 2022-12-15
?
富国沪深

TA贡献1790条经验 获得超9个赞

事实上,你真正想要达到的是“PLUS 1”。如果你的 N <= 10,直接使用 int。如果您的 N <=10,请使用 long。

当然,如果你真的需要N非常大。尝试为数字实现一个类?


查看完整回答
反对 回复 2022-12-15
  • 4 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信