You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:整数数组加1功能实现异常,特定输入输出不符合预期

整数数组加1的正确实现(解决溢出问题)

你的代码在处理较长数组时出现错误,核心原因是整数溢出:

  • 输入[9,8,7,6,5,4,3,2,1,0]对应的整数是9876543210,而Java中int类型的最大值仅为2147483647,远小于这个数,导致results变量溢出后变成错误值,最终输出不符合预期。

正确的做法是直接对数组进行原地进位处理,无需将整个数组转换为整数,具体实现如下:

public static int[] plusOne(int[] digits) {
    // 从数组末尾开始遍历处理进位
    for (int i = digits.length - 1; i >= 0; i--) {
        digits[i]++;
        // 加1后未到10,无进位,直接返回
        if (digits[i] != 10) {
            return digits;
        }
        // 有进位,当前位置0,继续向前处理
        digits[i] = 0;
    }
    // 所有位都进位(比如输入[9,9,9]),需新建长度+1的数组
    int[] newDigits = new int[digits.length + 1];
    newDigits[0] = 1;
    return newDigits;
}

逻辑说明:

  • 从数组最后一位开始加1,若当前位加1后不为10,说明无进位,直接返回修改后的原数组。
  • 若当前位加1后为10,将该位置为0,继续向前遍历处理前一位的进位。
  • 若遍历完所有位仍有进位(输入全为9的情况),则新建一个长度更大的数组,首位设为1,其余位默认0即可。

该方法既避免了整数溢出问题,时间复杂度为O(n),无进位时空间复杂度为O(1),仅在全9场景下为O(n),效率更高。

内容的提问来源于stack exchange,提问作者YoYotheYogurt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:32:37