1. 程式人生 > >Plus One-LeetCode JavaScript

Plus One-LeetCode JavaScript

看到這個題目剛開始不知道讓幹什麼,於是試了幾個customer testcase發現讓加一。

於是我腦海中閃現兩種演算法:1:從後向前遍歷陣列以進位;

2:轉為數字,+1,再轉回陣列。

先用第二種方法寫出來:

var plusOne = function(digits) {
    var str = "";
    for(var i=0;i<digits.length;i++) {
        str = str + digits[i];
    }
    var evalstr =parseInt(str);
    var num = evalstr + 1;
    var plusone = num.toString();
    var arr = plusone.split("");
    for(var j=0;j<arr.length;j++){
        arr[j] = parseInt(arr[j]);
    }
    return arr;
    
};
console.log(plusOne([6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]));

發現簡單的例子可以通過,提交的時候發現結果不對。參考https://segmentfault.com/a/1190000005856131 

是轉為數字時巨型數字溢位,解決方法不太輕量級。所以只能轉戰第一種方法了。很順利地一次通過了,js的陣列方法真是好用!

/**
 * @param {number[]} digits
 * @return {number[]}
 */
var plusOne = function(digits) {
    var flag = true;
    var bit = digits.length - 1;
    while(flag){
        if(digits[bit]<9){
            digits[bit]++;
            flag = false;
        }else if(bit == 0){
            digits[bit] = 0;
            digits.unshift(1);
            flag = false;
        }else{
            digits[bit] = 0;
            bit--;
        }
    
    }
    return digits;
    
};