思路:
因为本题不能使用任何 BigInteger库,所以我们可以使用双指针来模拟人工计算,步骤如下:
(1)创建指针 i 指向 nums1末位数字,j 指向 nums2末位数字。
(2)i, j 数字相加,用进位就用 carry 来记录进位值,无则为 0。
(3)若产生进位,则当前数字为 (i+j)%10 的值。
(4)若遍历过程中,nums1 或 nums2 当前已无数字,则用 0 补位来计算。
functon addStrings(num1, num2) {
let i = num1.length - 1,//两个指针分别指向两个数的尾部
j = num2.length - 1,
carry = 0,//进位
ans = [];
while(i >= 0 || j >= 0 || carry !== 0){//判断指针是否到头
let c1 = i >= 0 ? num1.charAt(i) - '0' : 0,//没到头就转换成数字,到头就赋值为0
c2 = j >= 0 ? num2.charAt(j) - '0' : 0;
let sum = c1 + c2 + carry;
ans.unshift(sum % 10);//取余数,从队头放入res
carry = Math.floor(sum / 10);//重新设置进位
i--;
j--;
}
return ans.join('');//将数组连接成字符串
};