給定一個非負整數組成的非空數組,在該數的基礎上加一,返回一個新的數組。git
最高位數字存放在數組的首位, 數組中每一個元素只存儲一個數字。數組
你能夠假設除了整數 0 以外,這個整數不會以零開頭。優化
示例 1:spa
輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入數組表示數字 123。
示例 2:it
輸入: [4,3,2,1] 輸出: [4,3,2,2] 解釋: 輸入數組表示數字 4321。
思路:
1,加一個判斷值,是否是須要建立新數組,而且加1.
2,倒序循環判斷,若是當前值+1等於10,當前賦值爲0,前進加1
代碼:
public int[] plusOne(int[] digits) {
boolean bool = false;
for (int i = digits.length-1; i >=0 ; i--) {
if(digits[i] +1>9){
bool = true;
digits[i] =0;
}else{
digits[i] +=1;
bool = false;
break;
}
}
if(bool){
int[] digite1 = new int[digits.length+1];
digite1[0]=1;
System.arraycopy(digits,0,digite1,1,digits.length);
return digite1;
}
return digits;
}
別人好的代碼:
public int[] plusOne(int[] digits) { boolean add = true; int len = digits.length; for (int i = len - 1; i > -1; i--) { if (digits[i] == 9 ) { digits[i] = 0; add =true; } else { digits[i] += 1; add = false; return digits; } } if(add){ int[] newArray = new int[len + 1]; newArray[0] = 1; return newArray; } return digits;}原本計劃是在10分鐘內完成全部的事情,由於初看很簡單,沒想到位數爲值爲9的狀況打破了想法。看來別人的代碼發現本身的缺陷很明顯。根本沒有優化,好比不須要加1判斷,不須要最後copy數組等。耽誤太多時間了。截止如今一個小的問題消耗了46分鐘。無語了。雖然包括寫這個文章。加油。之後中午練習,不要佔用工做時間了。太耽誤時間了。