1. 程式人生 > >LeetCode-探索-初級-陣列-加一-java

LeetCode-探索-初級-陣列-加一-java

加一

給定一個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。

最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例 1:

輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入陣列表示數字 123。

示例 2:

輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入陣列表示數字 4321。

比較簡單,通過判斷是否進位即可

需要注意的只有999這種情況,比較麻煩

public int[] plusOne(int[] digits) {
        boolean flag = digits[digits.length - 1] + 1 == 10;  //若第一位發生進位
        digits[digits.length - 1] = (digits[digits.length - 1] + 1) % 10;  //更改第一位的值
        if (!flag)  //如果在個位不進位,直接返回
            return digits;
        //由於個位不進位,則之後都不會產生進位

        for (int i = digits.length - 2 ; i >= 0 ; i --)
            if (flag) {  //進位
                if ((digits[i] = (digits[i]  + 1) % 10) == 0)
                    flag = true;  //本次還要進位,繼續迴圈
                else  //本次沒有進位,直接返回
                    return digits;
            }
            //end if
        //end for
        //此時還有一種情況,99999
        if (flag) {  //一直到最後一位還有進位
            int[] result = new int[digits.length + 1];
            System.arraycopy(digits, 0, result, 1, digits.length);
            result[0] = 1;
            return result;
        }
        //這種是非999的情況
        return digits;
    }