给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 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]
示例4:
输入:digits = [9,9,9]
输出: [1, 0, 0, 0]
思路:
进位问题。
1.如果数组末位(个位)小于 9 ,直接个位加 1 返回即可
2.如果数组末位(个位)等于 9,将该位(个位)设置为 0 ,并且产生了进位,接下来观察前一位(十位)
3.如果前一位(十位)小于 9 ,直接十位加 1 返回即可
4.如果前一位(十位)等于 9,将该位(十位)设置为 0 ,并且产生了进位,接下来观察前一位(百位)
5.以此类推,最后观察运算完的第一位是否为 0 ,如果为 0 ,则在最前面加 1
public class PlusOne {
public int[] plusOne(int[] digits){
int n = digits.length;
//从后往前遍历数组
for(int i = n - 1; i >= 0; --i){
if(digits[i] < 9){
++digits[i];
//末位数小于9 没有进位 直接返回
return digits;
}
//存在进位 将当前位置于0
digits[i] = 0;
}
//此时以上程序均未执行 即全部为9 所以将第一位置为1 剩余位数默认是0
int[] ans = new int[n+1];
ans[0] = 1;
return ans;
//数组默认其他元素为0
/*for(int i=1;i<n;i++){
arr[i]=0;
}*/
}
}