该题我的第一思路是采用数组先转数字+1后再转数组返回
代码如下:
class Solution {
public int[] plusOne(int[] digits) {
//先把数组转成数字
int num1=digits[0],sum=0;
for(int i=1;i<digits.length;i++){
num1=num1*10+digits[i];
}
num1+=1;
int num2=num1;
while(num2!=0){//+1后数字位数
num2/=10;
sum++;
}
int ans[]=new int[sum];
for(int i=ans.length-1;i>=0;i--){//数字转成数组
ans[i]=num1%10;
num1/=10;
}
return ans;
}
}
实际上,我们忽略了题目重要的一点,就是1<=digits.length<=100
即我们得到的数字最大可能有100位,这是整型所无法承受的,即整型溢出
因此我肯定该题必然只能从数组本身的角度入手
第二思路:
我们直接把个位+1,然后去判断每一位数字是否为10
- 如果为10,则该位数字%=10 同时前一位数字++
- 否则不变
class Solution {
public int[] plusOne(int[] digits) {
int ans[]=new int[digits.length];
int flag=0;
digits[digits.length-1]++;//个位数+1
for(int i=digits.length-1;i>=0;i--){
if(digits[i]==10){//判断每一位数是否需要进位
digits[i]%=10;
if(i-1>=0)//注意判断数组是否越界
digits[i-1]++;
if(i==0){//判断是否最后一位需要进位
flag=1;
}
}
}
if(flag==1){
ans=new int[digits.length+1];//位数增加
ans[0]=1;
}else{
ans[0]=digits[0];
}
for(int i=1;i<digits.length;i++){
ans[i]=digits[i];//赋值
}
return ans;
}
}
最后附上官方题解
class Solution { public int[] plusOne(int[] digits) { for (int i = digits.length - 1; i >= 0; i--) { if (digits[i] != 9) { digits[i]++; return digits; } digits[i] = 0; } //跳出for循环,说明数字全部是9 int[] temp = new int[digits.length + 1];//java整型数组默认值为0 temp[0] = 1; return temp; } }