T******7 发帖数: 1419 | 1 public void plusOne(List digits) {
for (int i = digits.size() - 1; i >= 0; i--) {
int digit = digits.get(i);
if (digit < 9) {
digits.set(i, digit + 1);
return;
} else {
digits.set(i, 0);
}
}
digits.add(0);
digits.set(0, 1);
}
最后这句 加到尾部 不对啊,奇怪 | D*******r 发帖数: 2323 | 2 没有错,如果原数是99999...,那么加1后就会比原数多一位,如果digits是arraylist
的话,新加进来的digit加在头部比加在尾部要expensive很多。所以选择在尾部加0,然
后把第一位digit给reset成1。
★ 发自iPhone App: ChineseWeb 8.2.2
★ 发自iPhone App: ChineseWeb 8.2.2
【在 T******7 的大作中提到】 : public void plusOne(List digits) { : for (int i = digits.size() - 1; i >= 0; i--) { : int digit = digits.get(i); : if (digit < 9) { : digits.set(i, digit + 1); : return; : } else { : digits.set(i, 0); : } : }
| m*****k 发帖数: 731 | 3 public static int[] plusOne(int[] arr){
//nonsense check ...
int cur = arr.length - 1;
while(cur>=0 && arr[cur]==9){
arr[cur]=0;
cur--;
}
if(cur==-1){
int[] re = Arrays.copyOf(arr, arr.length + 1);
re[0]=1;
return re;
}
else{
arr[cur] = arr[cur]+1;
return arr;
}
} |
|