iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 9
0
自我挑戰組

[LeetCode with JavaScript] 一起來刷 LeetCode吧 ~~~ (ノ>ω<)ノ系列 第 9

[LeetCode with JavaScript] Day 9: Plus One

觀前提醒:

  1. 我預設大家已經先思考並分析過題目,沒啥想法才開始 google 找解題靈感。若無,建議每題先花 1~2 顆番茄鐘的時間來分析題目比較好。可參考番茄鐘工作法
  2. 承上,既然已經有思考過了,那我這邊直接 po 題目 + 解題想法 + code +心得 。若已經在 code 內有足夠的註解了,那我可能解題想法 & 心得的部分就不會寫太多,免得干擾你的思考。
  3. 所有解法都是已經取得系統的 Accepted,但或許不是最優解法,請多包涵。
  4. 若對於解法不太懂,可以嘗試用 Chrome 的 debugger 來試跑看看 (教學文)
  5. 最後,歡迎在下面留言指教~教學相長才會進步歐~/images/emoticon/emoticon41.gif

題目

Given a non-empty array of digits representing a non-negative integer, increment one to the integer.

The digits are stored such that the most significant digit is at the head of the list, and each element in the array contains a single digit.

You may assume the integer does not contain any leading zero, except the number 0 itself.

Example 1:

Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.

Example 2:

Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.

Example 3:

Input: digits = [0]
Output: [1]

Constraints:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

解題想法

  1. 從陣列最後一位開始操作,因為他是個位數。
  2. 先檢查個位數是否為"9",若否則直接該位數 +1 並回傳該陣列。
  3. 若是,則直接把該位數的 value 設定為 0,並移到下一位數。
  4. 記得處理特例:若尾數皆為9(etc.99,999,...),則當第三步執行完後,後頭應該都是為"0",所以我們需要在陣列最前方,使用.unshift(1)來補上一個"1"

CODE

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function (digits) {
  for (let i = digits.length - 1; i >= 0; i--) {
    // 處理尾數是否為9
    if (digits[i] !== 9) {
      digits[i]++;
      return digits;
    } else {
      digits[i] = 0;
    }
  }
  // 處理全部數字皆為9 (99、999、)
  digits.unshift(1);
  return digits;
};

心得

說老實話,這題是 easy 沒錯,但最困擾我的部分,就是在十進位中的"進位問題",我自己也是參考了下面這位大大的影片,才豁然開朗然後解決了這個問題~/images/emoticon/emoticon42.gif
連結由此去


謝謝大家的收看,LeetCode 小學堂我們下次見~/images/emoticon/emoticon29.gif


上一篇
[LeetCode with JavaScript] Day 8: Reverse String
下一篇
[LeetCode with JavaScript] Day 10: Valid Palindrome
系列文
[LeetCode with JavaScript] 一起來刷 LeetCode吧 ~~~ (ノ>ω<)ノ30

尚未有邦友留言

立即登入留言