1. 程式人生 > >LeetCode演算法題-Plus One(Java實現)

LeetCode演算法題-Plus One(Java實現)

這是悅樂書的第156次更新,第158篇原創

01 看題和準備

今天介紹的是LeetCode演算法題中Easy級別的第15題(順位題號是66)。給定一個非空數字陣列來表示一個非負整數,並給其加1。該陣列已經排序,並且最高位有效數字位於陣列的開頭,並且陣列中的每個元素都表示單個數字。假設該整數不以零開頭,除了數字0本身。例如:

輸入:[1,2,3]
輸出:[1,2,4]
說明:陣列表示整數123

輸入:[4,3,2,1]
輸出:[4,3,2,2]
說明:陣列表示整數4321

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。

02 分析並解題

特殊情況:傳入的陣列為空陣列,沒有任何元素,直接返回新陣列[1]。

正常情況:

第一種情況,當陣列最後一個元素不是9的時候,直接將陣列的最後一個元素上加1,返回此陣列即可。

第二種情況,當陣列最後一個元素是9的時候,這事需要考慮是所有元素都為9,還是部分陣列元素為9,因為全部元素都是9的時候就涉及到陣列擴容了。

對此使用while迴圈,從後往前,先判斷元素本身的值加上1後是否等於10,如果等於10,則將該元素重新賦值為0,索引向前移動一位,繼續迴圈。

如果陣列的全部元素都是9,那麼索引每次向前迴圈自減的時候,最後會變成-1,即當索引等於-1時,此陣列中所有元素都是9,此時就可以直接陣列擴容了,一位整型陣列元素的預設值是0,只需要將新陣列的第一個元素賦值為1即可,此時的新資料就是最後的結果。

如果陣列的部分元素為9,那麼while迴圈會在元素連續為9的前一個索引位置停下,只需要將此索引位置的元素值加1返回原陣列即可。

public int[] plusOne(int[] digits) {
    if (digits.length == 0) {
        return new int[]{1};
    }
    int lastInt = digits[digits.length-1]+1;
    if (lastInt == 10) {
        int n = digits.length-1;
        while ( n >= 0 && (digits[n]+1) == 10) {
            digits[n] = 0;
            n--;
        }
        if (n != -1) {
            digits[n] = digits[n] + 1;
            return digits;
        } else {
            int[] newInt = new int[digits.length+1];
            newInt[0] = 1;
            return newInt;
        }
    } else {
        digits[digits.length-1] = lastInt;
        return digits;
    }
}

03 小結

上面的解法提交的時候,綜合用時0ms,打敗了100%的人,是第一次獲得這樣的結果!容我開心下,哈哈!以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!