一开始的解法
class Solution {
public int[] plusOne(int[] digits) {
/*
0 : 1
99 : 100
19 : 20
18 : 19
3 kind
reach to the end? stop x wrong!
reach to the end but carry == 1, resize new int[len + 1], the first element is 1
reach to the end carry == 0, stop
add carry (1st it's 1) to the cur element
if (cur == 10) {
carry = 1;
} else {
stop and return
}
*/
int carry = 1;
for (int i = digits.length - 1; i >= 0; i--) {
digits[i] = (digits[i] + carry) % 10;
if (digits[i] == 0) {
carry = 1;
} else {
carry = 0;
break;
}
if (i == 0 && carry == 1) {
// resize
int[] ret = new int[digits.length + 1];
ret[0] = 1;
for (int k = 0, j = 1; k < digits.length && j < ret.length; k++, j++) {
ret[j] = digits[k];
}
digits = ret;
}
}
return digits;
}
}
看到最快的答案惊了
当扫到最高位,依然需要进位时,直接int[] newArr = new [n + 1] 然后 newArr[0] = 1
return newArr;
就行了
因为其实,出现这种情况,意味着最高位后面的所有元素都是0!
不需要再重新for loop一遍,把原来的array中元素的值赋给新array了。