我的解法
class Solution {
public int[] plusOne(int[] digits) {
int adding = 1;
for(int i = digits.length - 1;i >= 0;i--){
if(adding == 0) break;
else{
digits[i] += adding;
adding = digits[i] / 10;
digits[i] %= 10;
}
}
if(adding == 0) return digits;
else{
int[] temp = new int[digits.length + 1];
temp[0] = 1;
for(int i = 0;i < digits.length;i++){
temp[i + 1] = digits[i];
}
return temp;
}
}
}
蠢蠢的做了算术运算,还在处理最高位有进位的情况时,复制了一遍数组
看到的一个解法
public int[] plusOne(int[] digits) {
for (int i = digits.length - 1; i >=0; i--) {
if (digits[i] != 9) {
digits[i]++;
break;
} else {
digits[i] = 0;
}
}
if (digits[0] == 0) {
int[] res = new int[digits.length+1];
res[0] = 1;
return res;
}
return digits;
}
感觉这个就比较好,第一、避免了复制数组,第二、利用了十进制算术特性,避免进行算术运算。
我还是太菜了,ORZ。