给出两个 非空 的数组用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个位置只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的数组表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:[2, 4, 3] + [5, 6, 4]
输出:[7, 0, 8]
原因:342 + 465 = 807
var addTwoNumbers = function(l1, l2) {
// 找出最长的数组
let longLen = 0;
let lArr;
let sArr;
if (l1.length > l2.length) {
longLen = l1.length;
lArr = l1;
sArr = l2;
} else {
longLen = l2.length;
lArr = l2;
sArr = l1;
}
let i = 0;
const result = [];
// 判断是否需要进1
let isToOne = false;
while(i < longLen) {
// 判断比较短的数组在当前索引下是否有值 没有就设为0
const sValue = sArr[i] === undefined ? 0 : sArr[i];
if (lArr[i] + sValue >= 10) {
// 相加大于10取个位
let toOneValue = Number(String(lArr[i] + sValue)[1]);
// 上次相加大于10进1
isToOne === true ? result.push(toOneValue+1) : result.push(toOneValue)
isToOne = true;
} else if(isToOne && lArr[i] + sValue === 9) {
// 上次相加大于10且这次相加刚好为9
result.push(0)
isToOne = true;
} else {
// 这次相加小于9 就算需不需要进1值都小于10
const value = isToOne ? lArr[i] + sValue + 1 : lArr[i] + sValue;
result.push(value);
isToOne = false;
}
i++
}
return result;
};
console.log(addTwoNumbers([2,4,9,5],[5,6,4])) // [7, 0, 4 , 6]