題目描述
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) 來擷取字元串指定位置的字元。