話不多說,直接上題目
給定一個由 整數 組成的 非空 陣列所表示的非負整數,在該數的基礎上加一,
最高位數字存放在陣列的首位, 陣列中每個元素只存盤單個數字,
你可以假設除了整數 0 之外,這個整數不會以零開頭,
示例 1:
輸入:digits = [1,2,3]
輸出:[1,2,4]
解釋:輸入陣串列示數字 123,
示例 2:
輸入:digits = [4,3,2,1]
輸出:[4,3,2,2]
解釋:輸入陣串列示數字 4321,
示例 3:
輸入:digits = [0]
輸出:[1]
解法1:
針對16位數字以下是可以,但是超過16位的數字就不行了,16位的陣列會丟失精度,所以下面這個就處理不了
var plusOne = function (digits) {
// 將陣列數字轉為數字加1
const a = ((digits.join().replace(/,/g, '') - 0) + 1);
// 轉成字串
var str = a + "";
// 定義一個陣列 用來接收每個數字
var resultArr = [];
for (var i = 0; i < str.length; i++) {
resultArr.push(parseInt(str[i]))
}
return resultArr;
};
解法2:
采用的是倒著遍歷,如果是9則向前進
var plusOne = function (digits) {
for (let i = digits.length - 1; i >= 0; i--) {
// 最后一位如果不是9
if (digits[i] !== 9) {
// 直接+1 回傳就好了
digits[i]++;
return digits;
} else {
// 如果是9 則讓他變成0
digits[i] = 0;
}
}
// 在遍歷9時,此時的9已經被賦值為0,則在該0的前面加1
digits.unshift(1);
return digits;
};
解法3:
采用的一個遞回方式
var plusOne = function (digits) {
let last = digits[digits.length - 1] - 0;
if (last === 9) {
// 如果等于9 的話截取出除了最后一位的陣列
let arr = plusOne(digits.slice(0, digits.length - 1));
// 給陣列末尾添加0
arr.push(0);
// 當陣列只有一個數字的時候并且是9 例:[9]
if (digits.length === 1){
// 到這一步已經是[0] 則向陣列的開頭添加一個1 [1,0]
arr.unshift(1);
}
return arr;
} else {
// 一直截取到最后一位數字不是9時則直接加1 即可
digits[digits.length - 1] = last + 1;
}
return digits;
};
如果有更好的解決方法,可以評論在下方,一起學習((●’?’●))
如果有幫助到你,可以給個三連+關注 蟹蟹

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/300761.html
標籤:其他
上一篇:vue3——自己封裝輪播圖效果
