LeetCode 415. 字符串相加

使用双指针模拟竖式加法。从右向左遍历,逐位相加并处理进位。

+
当前进位 (carry):0
点击“开始”或“下一步”开始演示
JavaScript 实现 模拟指针
let i = num1.length - 1;
let j = num2.length - 1;
let carry = 0;
const res = [];
while (i >= 0 || j >= 0 || carry !== 0) {
const n1 = i >= 0 ? num1[i] - '0' : 0;
const n2 = j >= 0 ? num2[j] - '0' : 0;
const sum = n1 + n2 + carry;
res.push(sum % 10);
carry = Math.floor(sum / 10);
i--; j--;
}
return res.reverse().join('');

复杂度分析

时间复杂度: O(max(N, M)),其中 N, M 是两字符串长度。我们需要遍历较长的那个字符串。

空间复杂度: O(1) (除了存储答案用的空间)。