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%的人,是第一次獲得這樣的結果!容我開心下,哈哈!以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!