使用双指针模拟竖式加法。从右向左遍历,逐位相加并处理进位。
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) (除了存储答案用的空间)。