求助:整数数组加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
相关产品推荐
相关产品推荐

