原题链接:https://leetcode-cn.com/problems/plus-one/
不建议将数组中的数字拼接成整数计算,这样的话会导致整形溢出。
在操作的时候,注意一下进位的问题
- 例如[1,2,9]+1=[1,3,0]
- 例如[1,9,9]+1=[2,0,0]
- 特殊的[9,9,9]+1=[1,0,0,0]
也就是说如果数组中全是9,则计算出来的数组长度比原先多1,且第一个元素是1,其他都是0。
开始的个位+1(carry),可以理解为是之前的数字进位1而来的
所以,从个位开始,先算+1后的数字num,再计算需要填入的数字num%10,后计算进位carry=num/10
- 如果carry==0表示不产生进位,则停止操作即可;
- 如果carry==1则继续向前进位+1;
- 如果所有的数字都操作完毕,carry还是等于1的话,只能说明原先的数组中都是9
class Solution {
public int[] plusOne(int[] digits) {
int carry=1;
for(int i=digits.length-1;i>=0;i--){
int num=digits[i]+carry;
digits[i]=num%10;
carry=num/10;
if(carry==0){
break;
}
}
if(carry==1){ //只能说明数组当中肯定全是9
int[] arr=new int[digits.length+1];
arr[0]=1;
return arr;
}
return digits;
}
}