LeetCode上数组形式的整数加法,简单难度,记录下解题思路
一开始以为是简单难度又可以重拳出击了,写了下面的代码
var addToArrayForm = function(A, K) {
// 将A数组转换成数字
let num = Number(A.join(''))
// 数字相加之后再转换成字符串
let sum = num + K + ''
let res = []
// 将字符串每个值推入数组
for(let i=0; i<sum.length; i++) {
res.push(sum[i])
}
// 返回结果
return res
};
这样来说对于小一点的数据没什么问题,但是忽略了JavaScript中数字的范围,最大可存储2的53次方的数字,即9007199254740992,超过的就不会显示了
修改下程序,最后改成从A和K的末尾相加,取相加的个位数放入数组
var addToArrayForm = function(A, K) {
// 记录下A数组的长度
let len = A.length - 1
let res = []
// 每次取A的最后一位和K相加
// 结束的标准是K计算结束,或者A到头
while (len >= 0 || K) {
// 如果当前A[len]存在
if(A[len]) {
// 就相加
K = K + A[len]
}
// 之后取个位数添加到数组,unshift是添加到数组开头
res.unshift(K % 10)
// 之后更新K是去除个位数后剩余的数,如果这个数不为0
// 那就是K是个2位数以上的数字
if(Math.floor(K /10)) {
// 保存K当前的十位以上的数
K = Math.floor(K /10)
} else {
// 如果是个位数,那就是计算结束了,跳出循环
K = 0
}
// 换下一位
len--
}
return res
};