每天一道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以後,不會產生進位,循環結束