Leetcode 66. 加一
阿新 • • 發佈:2018-12-10
66. 加一
給定一個由整陣列成的非空陣列所表示的非負整數,在該數的基礎上加一。
最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例 1:
輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入陣列表示數字 123。 示例 2:
輸入: [4,3,2,1] 輸出: [4,3,2,2] 解釋: 輸入陣列表示數字 4321。
本題最關鍵的是返回型別為陣列,考慮到加一的三種情況, (1)沒有進位 for example:123 -> 124 尾數一位改變 (2)部分進位 for example:199 -> 200 部分數字改變 (3)全域性進位 for example:999 -> 1000 陣列擴充
在這裡插入程式碼片 ```class Solution { public int[] plusOne(int[] digits) { int m = digits.length; int f=m; int sum=0; if(digits[m-1]!=9){//沒有進位的情況 digits[m-1]++; return digits; } while(m>0) { if(digits[m-1]==9 ) {//如果區域性可能有進位的情況 digits[m-1]=0;//9+1=10 但是要求每一個數組位置不能超過10 只能儲存1~9 m--; //將末尾設定成0, 向前遍歷 } else { digits[m-1]++;//區域性進位 第二種情況 return digits; } } if(digits[0]==0) {//題目已知首位不為0,若首位被改變成0,則為第三種情況 n個9 -> 1個1 + n個0 int b[]=new int[f+1]; b[0]=1; for(int k=1;k<f+1;k++) { b[k]=0; } return b; } return digits; } }
此題關鍵在於部分進位和全域性進位的判斷