给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0]
输出:[1]

提示:

1 <= digits.length <= 100
0 <= digits[i] <= 9

class Solution {
    /**
     * @author zhang
     * 第一次的思路:
     * 题没读仔细,本以为这个题很简单,但是提交后发现只通过了92/111
     * 看到出错的那个用例我明白了,如果加1后需要进位,那么数组的长度会加1,拿用例来说,[9] --> [1,0]
     * 所以就不单单是数组末位+1的问题了
     * 第二次:
     * 因为他给的数组长度1 <= digits.length <= 100,所以直接相加就不可取了
     * 根据第一次通过了92个用例,所以只有一小部分用例是特殊的,那么特殊的就在于9,+1后就变成了10
     * 用for循环来判断数组中从后往前连续的9,这样才会使它们全部都+1
     * 然后如果全是9的话,把数组的长度+1,然后digits[0]==1,其余全是0
     */
    public int[] plusOne(int[] digits) {
        if (digits == null) {
            return null;
        }
        for (int i = digits.length - 1; i >= 0; i--) {
            if (digits[i] != 9) {
                digits[i]++;
                return digits;
            } else {
                digits[i] = 0;
            }
        }
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }

}

链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2cv1c/

最后修改:2022 年 01 月 07 日
点个赞或者请作者喝杯咖啡