我用JS刷LeetCode | Day 11 | Plus One

我用JS刷LeetCode | Day 11 | Plus Onejavascript

搜索插入位置:

說明:現階段的解題暫未考慮複雜度問題

首發地址:http://www.brandhuang.com/article/1584452962369前端

Question:

給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。java

最高位數字存放在數組的首位, 數組中每一個元素只存儲單個數字。git

你能夠假設除了整數 0 以外,這個整數不會以零開頭。數組

Example:微信

輸入: [1,2,3]
輸出: [1,2,4]
解釋: 輸入數組表示數字 123。


輸入: [4,3,2,1]
輸出: [4,3,2,2]
解釋: 輸入數組表示數字 4321。

我的分析:

  1. 分析題目:數組非空非負且爲整數首位不爲0每一個元素只存單個數字「即一位數」
  2. 不知道有不小夥伴和我剛開始看到這題的想法同樣?將給定的數組轉成字符串,而後轉成數字進行加一,而後再加一後的數字轉成字符串在轉成數組,最後將數組中的元素轉成數字,代碼見錯誤答案.
  3. 爲何第二步的答案錯了呢? , 緣由是:javascript 只能進行正負2的53次方範圍內的精確算數運算,若是數組過長,就得不到咱們想要的結果了,因此錯誤答案不是咱們想要的。
  4. 下面分析正確的答案:要進行數字的加 1,確定是從個位數開始加起「即給定數組的最後一位」,因此咱們從數組的最後一位開始遍歷數組;
  5. 因爲題目告知 每一個元素只存單個數字,因此當元素的值爲 9 時,是一個特殊值,經過分析特殊數組:[9]、[9,9] ,能夠獲得, [9] 進行加 1 應該變成 [1, 0] [9, 9] 進行加 1 應該變成 [1, 0, 0];
  6. 由上一步分析得:遍歷數組時,若是某元素值爲 9,則將當前元素置爲 0,不然就將該元素加一,並返回結果;若是遍歷完數組尚未獲得結果,說明元素的全部元素都是 9,因此原數組此時元素都已置爲 0,由第五步分析得:須要在數組的最前面插入一個 1便可獲得咱們想要的結果;這種方式還不是受到第二、3步分析的限制
  7. 獲得正確答案

Answer:

// 錯誤答案
var plusOne = function(digits) {
    let str = digits.join('') // 將數組元素拼接成字符串
    let newNum = Number(str) + 1 // 執行 加1的操做
    let newArr = newNum.toString().split('') // 將數字轉成數組
    return newArr.map(Number) // 將數組中的字符串元素轉成數字並返回結果
}

// 正確答案
var plusOne = function(digits) {
    for(let i = digits.length - 1; i>=0; i--){
        if(digits[i] === 9){
            digits[i] = 0
        } else{
            digits[i]++
            return digits
        }
    }
    digits.unshift(1)
    return digits
};

其餘:

本題更多 JavaScript 解析,點擊連接訪問對應的答案:https://leetcode.comspa

若有興趣掃碼或微信搜索「九零後重慶崽兒」,咱們一塊兒學前端。code

brandQRcode.jpg

相關文章
相關標籤/搜索