小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
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
解题思路
- 只有数组元素全为9的数组,加一以后会增大数组长度,所以我们需要先遍历一遍数组,检查数组是否全为9组成,如果是的话,只需要新生成一个长度加一的数组,将第一个元素置为1并且直接返回即可。
- 否则的话,维护一个进位,代表从低位向高位的进位,然后与当前位相加,判断是否需要进位,并且将当前数组元素置为当前位的加上进位以后的值
代码
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)。返回值不计入空间复杂度。