LeetCode上數(shù)組形式的整數(shù)加法,簡單難度,記錄下解題思路
一開始以為是簡單難度又可以重拳出擊了,寫了下面的代碼
var addToArrayForm = function(A, K) {
// 將A數(shù)組轉(zhuǎn)換成數(shù)字
let num = Number(A.join(''))
// 數(shù)字相加之后再轉(zhuǎn)換成字符串
let sum = num + K + ''
let res = []
// 將字符串每個值推入數(shù)組
for(let i=0; i<sum.length; i++) {
res.push(sum[i])
}
// 返回結(jié)果
return res
};
這樣來說對于小一點的數(shù)據(jù)沒什么問題,但是忽略了JavaScript中數(shù)字的范圍,最大可存儲2的53次方的數(shù)字,即9007199254740992,超過的就不會顯示了

修改下程序,最后改成從A和K的末尾相加,取相加的個位數(shù)放入數(shù)組
var addToArrayForm = function(A, K) {
// 記錄下A數(shù)組的長度
let len = A.length - 1
let res = []
// 每次取A的最后一位和K相加
// 結(jié)束的標準是K計算結(jié)束,或者A到頭
while (len >= 0 || K) {
// 如果當(dāng)前A[len]存在
if(A[len]) {
// 就相加
K = K + A[len]
}
// 之后取個位數(shù)添加到數(shù)組,unshift是添加到數(shù)組開頭
res.unshift(K % 10)
// 之后更新K是去除個位數(shù)后剩余的數(shù),如果這個數(shù)不為0
// 那就是K是個2位數(shù)以上的數(shù)字
if(Math.floor(K /10)) {
// 保存K當(dāng)前的十位以上的數(shù)
K = Math.floor(K /10)
} else {
// 如果是個位數(shù),那就是計算結(jié)束了,跳出循環(huán)
K = 0
}
// 換下一位
len--
}
return res
};