给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
提示:
- num1 和num2 的长度都小于 5100
- num1 和num2 都只包含数字 0-9
- num1 和num2 都不包含任何前导零
- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式
题解
创建2个指针 i, j 指向 num1 与 num2 的末端,分别逐位计算
计算的数字大于 10 则进位,储存在 carry 变量中
最后计算完后,如果 carry 大于 0 则 在进一位
/**
* @param {string} num1
* @param {string} num2
* @return {string}
*/
var addStrings = function(num1, num2) {
let i = num1.length - 1
let j = num2.length - 1
const len = Math.max(i, j)
let carry = 0
let res = ''
for (let k = 0; k < len + 1; k++) {
let n1 = num1[i] ? Number(num1[i]) : 0
let n2 = num2[j] ? Number(num2[j]) : 0
let num = n1 + n2 + carry
if (num >= 10) {
num -= 10
carry = 1
} else {
carry = 0
}
res = `${num}${res}`
i--
j--
}
if (carry > 0) {
res = `${carry}${res}`
}
return res
};