1. 程式人生 > >Leetcode 66. 加一

Leetcode 66. 加一

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;
    }
}

此題關鍵在於部分進位和全域性進位的判斷