题目原型
给定一个表示 大整数 的整数数组 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]这种状态 那么直接返回数组即可
这道题主要的难点就是进位的处理。