力扣简66 +1
还是暴力写法 转成数加一再压回 下面有错误 对于超过int类型的整数出错 还没有改好
class Solution {
public int[] plusOne(int[] digits) {
int sum=0;
int count=0;
int flag=0;
int l=digits.length;
for(int i=0;i<l;i++) {
sum=(int)(sum+digits[i]*Math.pow(10,l-i-1));
if (digits[i]==9) {
count++;
}
}
sum=sum+1;
// System.out.println(sum);
if(count==l) {
int[]res = new int[l+1];
while(sum!=0) {
res[l-flag]=sum % 10;
sum=sum/10;
flag++;
}
// for(int i:res) {
// System.out.print(i);
// }
return res;
}
else {
int[]res=new int[l];
while(sum!=0) {
res[l-flag-1]=sum % 10;
sum=sum/10;
flag++;
}
// for(int i:res) {
// System.out.print(i);
// }
return res;
}
}
}
看了题解自己写出来的代码
最开始有点小问题 :一是在求解第一个9的循环里没有包含digits[0] ;二是在最后一个9在中间位置时前一位加一的这种情况下,前一位找错一位
class Solution {
public int[] plusOne(int[] digits) {
int l=digits.length;
int flag=-1;
for(int i=l-1;i>=0;i--) {
if(digits[i]==9) {
flag++;
}
else {
break;
}
}
if(flag==-1) {
digits[l-1]=digits[l-1]+1;
// for(int i:digits) {
// System.out.print(i);
// }
return digits;
}
else if(flag==l-1) {
digits=new int[l+1];
digits[0]=1;
// for(int i:digits) {
// System.out.print(i);
// }
return digits;
}
else {
digits[l-flag-2]=digits[l-flag-2]+1;
for(int j =l-flag-1;j<l;j++) {
digits[j]=0;
}
// for(int i:digits) {
// System.out.print(i);
// }
return digits;
}
}
}

浙公网安备 33010602011771号