第十二個算法-加1

給定一個非負整數組成的非空數組,在該數的基礎上加一,返回一個新的數組。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分鐘。無語了。雖然包括寫這個文章。加油。之後中午練習,不要佔用工做時間了。太耽誤時間了。
相關文章
相關標籤/搜索