我用JS刷LeetCode | Day 11 | Plus Onejavascript
說明:現階段的解題暫未考慮複雜度問題
首發地址:http://www.brandhuang.com/article/1584452962369前端
給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。java
最高位數字存放在數組的首位, 數組中每一個元素只存儲單個數字。git
你能夠假設除了整數 0 以外,這個整數不會以零開頭。數組
Example:微信
輸入: [1,2,3] 輸出: [1,2,4] 解釋: 輸入數組表示數字 123。 輸入: [4,3,2,1] 輸出: [4,3,2,2] 解釋: 輸入數組表示數字 4321。
數組非空非負且爲整數
、首位不爲0
、每一個元素只存單個數字「即一位數」
。將給定的數組轉成字符串,而後轉成數字進行加一,而後再加一後的數字轉成字符串在轉成數組,最後將數組中的元素轉成數字
,代碼見錯誤答案
.爲何第二步的答案錯了呢?
, 緣由是:javascript 只能進行正負2的53次方範圍內的精確算數運算
,若是數組過長,就得不到咱們想要的結果了,因此錯誤答案不是咱們想要的。要進行數字的加 1,確定是從個位數開始加起「即給定數組的最後一位」
,因此咱們從數組的最後一位開始遍歷數組;每一個元素只存單個數字
,因此當元素的值爲 9
時,是一個特殊值,經過分析特殊數組:[9]、[9,9]
,能夠獲得, [9] 進行加 1 應該變成 [1, 0]
, [9, 9] 進行加 1 應該變成 [1, 0, 0]
;遍歷數組時,若是某元素值爲 9,則將當前元素置爲 0,不然就將該元素加一,並返回結果;若是遍歷完數組尚未獲得結果,說明元素的全部元素都是 9,因此原數組此時元素都已置爲 0
,由第五步分析得:須要在數組的最前面插入一個 1便可獲得咱們想要的結果
;這種方式還不是受到第二、3步分析的限制
// 錯誤答案 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