这题的本质是大整数相加,思想很简单,但是就是看怎么巧妙的将代码实现
步骤:
i
和j
分别指向num1
和num2
的最后一位,t
表示进位,每次计算他们两个的结果和t += num1[i] + num2[j]
每次运算后i
和j
都要后移一位 这句话非常巧妙 让进位t
担任两个角色- 将
t
的余数压入结果数组中去res.push(t % 10)
这里的t
是进位t
和num1[i]
num2[j]
三个数的和 - 将
t
转换为上一次的进位t = t % 10
原理上是这样但是存在精度问题所以t = Math.floor(t % 10)
- 最后再判断最后是否有进位,如果有再在最后加上1
最好自己模拟一遍
代码:
var addStrings = function(num1, num2) {
let res = [];
let i = num1.length - 1, j = num2.length - 1, t = 0;
while (i >= 0 || j >= 0) {
if (i >= 0) {
t += num1[i --] - '0';
}
if (j >= 0) {
t += num2[j --] - '0';
}
res.push(t % 10);
t = Math.floor(t / 10);
}
if (t) res.push(1);
return res.reverse().join("");
};