Given a non-negative number represented as an array of digits, plus one to the number.
The digits are stored such that the most significant digit is at the head of the list.
13: int[]{1,3}
27: int[]{2,7}
public int[] plusOne(int[] digits) {
int[] result;
boolean flag = true;
for(int digit:digits)
if(digit != 9)
flag = false;
if(flag == true){
result = new int[digits.length+1];
result[0] = 1;
for(int i = 0;i < digits.length;i++)
result[i+1] = 0;
}
else {
result = new int[digits.length];
for(int i = result.length-1;i>=0;i--){
if(i == 0){
if(i == result.length-1)
result[i] = (digits[i] + 1) % 10;
else
result[i] = (digits[i]) % 10;
}
else{
if(i == result.length-1){
result[i] = (digits[i] + 1) % 10;
digits[i-1] += (digits[i] + 1) / 10;
}
else{
result[i] = (digits[i]) % 10;
digits[i-1] += (digits[i]) / 10;
}
}
}
}
for(int t:result) System.out.print(t+" ");
return result;
}
写的很繁琐 看看网上的博客
明白了 :
因为我是按照两个整数相加那样想的 每位都计算
其实这道题目而言只要某一位不进位了就不需要往下计算了 后面都不会变
999989+1 当8+1没有进位 就可以结束了 直接就地修改返回就可以
如果题目指定不允许修改传进来的参数digits那么就用我这种方法
如果可以修改就用http://www.itnose.net/news/172/6334216这种 简洁明了