每天一道leetcode66-加1
- 2019 年 10 月 4 日
- 筆記
前言
2018.11.17號打卡 明天的題目leetcode16: https://leetcode-cn.com/problems/3sum-closest/description/
題目
每天一道leetcode66-加1 分類:數組 中文鏈接: https://leetcode-cn.com/problems/plus-one/description/ 英文鏈接 https://leetcode.com/problems/plus-one/description/
題目詳述
給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。 最高位數字存放在數組的首位, 數組中每個元素只存儲一個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 示例 1: 輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入數組表示數字 123。 示例 2: 輸入: [4,3,2,1] 輸出: [4,3,2,2] 解釋: 輸入數組表示數字 4321。
題目詳解
思路
- 分兩種情況討論,一種是數組中的數字都是9,比如999,這時候數組長度需要+1;首位置位1,後幾位置位0。
- 另一種是情況是不全是9,那麼加1的話,比如說個位是9,那麼就把個位變為0,同時下一位加1,就是通過判斷每一位是不是9來結束這個判斷(從個位到最高位依次+1,直到不是9就結束循環)
程式碼
class Solution { public int[] plusOne(int[] digits) { boolean flag = true; for(int i=0;i<digits.length;i++) { if(digits[i] != 9) { flag = false; break; } } if(flag) { int [] result = new int [digits.length+1]; result[0] = 1; return result; }else{ for(int i=digits.length-1;i>=0;i--) { if(digits[i] != 9) { digits[i] += 1; break; }else{ digits[i] = 0; } } } return digits; } }
程式碼講解
- 4-11行 判斷數字是不是全是9,
- 12-16行 全是9則直接new一個數組,最高位置位1,其它位置位0
- 24-26行 就是從個位開始判斷是不是9如果是9,那麼就把這一位變成0,
- 20-23行 就是一位不是9,那麼加1以後,不會產生進位,循環結束