Plus One leetcode java

愛做飯的小瑩子發表於2014-08-03

題目

Given a non-negative number represented as an array of digits, plus one to the number.

The digits are stored such that the most significant digit is at the head of the list.

 

題解

這道題就是實現題。

先對原陣列進行處理。從陣列最後一位開始往前檢查,如果當前數字是<9的,說明你加1無需進位,從迴圈跳出即可,如果當前數字等於9,說明加1涉及進位,且加1後當前數字應記為0,繼續迴圈處理。

當對原陣列處理完後,還需要判斷當前第0位是不是已經變為0了,如果已經變為0了說明是類似99+1這種,需要進位。其他則不需要。

一般對數字進行操作的題都要考慮邊界,尤其是溢位問題。

 

程式碼如下:

 1 public int[] plusOne(int[] digits) {
 2             int length;
 3             length = digits.length;
 4             for(int i = length-1; i>=0; i--){
 5                 if(digits[i]<9){
 6                     digits[i]++;
 7                     break;
 8                 }else{
 9                     digits[i]=0;
10                 }
11             }
12             
13             int[] newdigits;
14             if(digits[0]==0){
15                 newdigits = new int[digits.length+1];
16                 newdigits[0]=1;
17                 for(int i=1;i<newdigits.length;i++){
18                     newdigits[i]=digits[i-1];
19                 }
20             }else{
21                 newdigits = new int[digits.length];
22                 for(int i=0;i<digits.length;i++){
23                     newdigits[i]=digits[i];
24                 }
25             }
26              return newdigits;
27         }

 另外一種考慮溢位的解法如下:

 

 1       public int[] plusOne(int[] digits) {
 2             for(int i=digits.length-1;i>=0;i--){
 3                 digits[i] =1+digits[i];
 4                 
 5                 if(digits[i]==10)
 6                     digits[i]=0;
 7                 else
 8                     return digits;
 9             }
10 
11             //don't forget over flow case
12             int[] newdigit = new int[digits.length+1];
13             newdigit[0]=1;
14             for(int i=1;i<newdigit.length;i++){
15                 newdigit[i] = digits[i-1];
16             }
17             return newdigit;
18         }

相關文章