leetcode 66. 加一

233 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

66. 加一

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

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

你可以假设除了整数 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

解题思路

  1. 只有数组元素全为9的数组,加一以后会增大数组长度,所以我们需要先遍历一遍数组,检查数组是否全为9组成,如果是的话,只需要新生成一个长度加一的数组,将第一个元素置为1并且直接返回即可。
  2. 否则的话,维护一个进位,代表从低位向高位的进位,然后与当前位相加,判断是否需要进位,并且将当前数组元素置为当前位的加上进位以后的值

代码

class Solution {
    public int[] plusOne(int[] digits) {

        int i = 0;
        for (; i < digits.length; i++) {
            if (digits[i] != 9) break;
        }
        if (i == digits.length) {
            int[] res = new int[digits.length + 1];
            res[0] = 1;
            return res;
        }
        int c = 1;
        for (int j = digits.length - 1; j >= 0; j--) {
            int old=digits[j] + c;
            c = old / 10;
            digits[j] = old % 10;
        }
        return digits;
    }
}

时间复杂度:O(n),其中 n 是数组digits 的长度。

空间复杂度:O(1)。返回值不计入空间复杂度。