LeetCode——66. 加一
阿新 • • 發佈:2018-12-10
題目
給定一個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。
最高位數字存放在陣列的首位, 陣列中每個元素只儲存一個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
示例 1:
輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入陣列表示數字 123。
示例 2:
輸入: [4,3,2,1] 輸出: [4,3,2,2] 解釋: 輸入陣列表示數字 4321。
解題思路
1、從陣列的最後一位往前遍歷(不包括第一位),如果後一位元素大於等於10則前一位元素加1,該元素減10(已經進位)。
2、單獨判斷第一位是否大於等於10,如果大於等於10給一個訊號(isOver)。
3、 如果接受到資訊(isOver)表示第一個元素需要進位,這時建立長度比原陣列大一的陣列。該陣列第一位為1,剩下的元素從原陣列複製。
程式碼實現
class Solution { public int[] plusOne(int[] digits) { int N = digits.length; Boolean isOver = false; digits[N-1] = digits[N-1] + 1; for (int i = N - 1; i > 0; i--) { if (digits[i] >= 10) { digits[i-1] = digits[i-1] + 1; digits[i] = digits[i] - 10; } } if (digits[0] >= 10) { isOver = true; } if (isOver) { int[] news = new int[N+1]; news[0] = 1; digits[0] = digits[0] - 10; for (int i = 1; i < news.length; i++) { news[i] = digits[i-1]; } return news; } return digits; } }