Plus One-LeetCode JavaScript
阿新 • • 發佈:2019-01-12
看到這個題目剛開始不知道讓幹什麼,於是試了幾個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; };