力扣刷题-加一

2025-11-07
刷题力扣

题目原型

给定一个表示 大整数 的整数数组 digits,其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导 0。


将大整数加 1,并返回结果的数字数组。

示例

示例 1:


输入:digits = [1,2,3]

输出:[1,2,4]

解释:输入数组表示数字 123。

加 1 后得到 123 + 1 = 124。

因此,结果应该是 [1,2,4]。

示例 2:


输入:digits = [4,3,2,1]

输出:[4,3,2,2]

解释:输入数组表示数字 4321。

加 1 后得到 4321 + 1 = 4322。

因此,结果应该是 [4,3,2,2]。

示例 3:


输入:digits = [9]

输出:[1,0]

解释:输入数组表示数字 9。

加 1 得到了 9 + 1 = 10。

因此,结果应该是 [1,0]。

提示:

1 ≤ digits.length ≤ 100

0 ≤ digits[i] ≤ 9

digits 不包含任何前导 0。

代码实现

class Solution {
    public int[] plusOne(int[] digits) {
        int n = digits.length;
        //从最后一位数开始处理 进位
        for(int i = n - 1; i >= 0 ; i--){
            digits[i]++;
            if(digits[i] == 10){
                digits[i] = 0;
            }else{
                return digits;
            }
        }
        //如果成功走完for循环 那么数组处于[9,9,9]这种状态 需要再进一位
        int[] result = new int[n + 1];
        result[0] = 1;
        return result;
    }
}

我的分析

1.要从最后一位开始处理

2.如果当前位加1后等于10 那么就把当前位设为0 并继续处理前一位

3.如果成功走完for循环 那么数组处于[9,9,9]这种状态 需要再进一位 那么就新建一个数组 把第一个元素设为1 并返回

4.如果数组不是[9,9,9]这种状态 那么直接返回数组即可

这道题主要的难点就是进位的处理。