题目描述
LeetCode——字符串相加(JS实现) 解题思路
由于本题不让使用BigInt等将字符串转换为整数形式,所以我们必须考虑使用其他的方法。所以本题考虑采用双指针的方法。
- 使用两个指针分别指向数字字符串的末尾位置。
- 使用变量carry记录进位。
- 当两个记录下标的位置大于等于0,或者进位不等于零的时候都进入循环。
- 在循环中当使用charAt这个API获取字符串对应下标的字符,两个字符相减会变成number类型。
- 每次循环结束都将两个指针左移一位。
解题代码
var addStrings = function(num1, num2) {
let l = num1.length - 1;
let r = num2.length - 1;
let carry = 0;
let ans = [];
while (l >= 0 || r >= 0 || carry !== 0) {
let c1 = l >= 0 ? num1.charAt(l) - '0' : 0;
let c2 = r >= 0 ? num2.charAt(r) - '0' : 0;
let sum = c1 + c2 + carry;
ans.push(sum % 10);
carry = Math.floor(sum / 10);
l--;
r--;
}
return ans.reverse().join('')
};
复制代码
题目反思
- 两个数字字符相减会转换为number类型。
- 可以使用 字符串.charAt(index) 来获取字符串指定位置的字符。