Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情
题目描述
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。(出自力扣题目)
- 示例1
输入: num1 = "11", num2 = "123"
输出: "134"
- 示例2
输入: num1 = "456", num2 = "77"
输出: "533"
- 示例3
输入: num1 = "0", num2 = "0"
输出: "0"
思路分析
- 从题意可知,给出的是两个字符串,字符串又不能直接相加,所以需要将字符串拆分出来再做计算。
- 两个字符串有可能长短不一致,所以在拆分成数组后需要将数组翻转一下。
- 循环数组,取下标相同的元素做计算,若是大于9,则需要进1,就用标识flag记录起来,下一轮循环时就把flag加上。
AC代码
let a = '123';
let b = '23';
function addStrings(n1, n2) {
if (n1 === n2 && n1 === "0") {
return n1
}
n1 = n1.split("").reverse();
n2 = n2.split("").reverse();
let length = Math.max(n1.length, n2.length);
let flag = 0;
let result = [];
for(let i = 0; i < length; i++) {
let n1 = +n1[i] || 0;
let n2 = +n2[i] || 0;
let sum = n1 + n2 + flag;
flag = 0;
if(sum > 9) {
sum -= 10
flag = 1
}
result.push(sum);
}
if(flag) result.push(flag)
return result.reverse().join("");
};
console.log(addStrings(a, b))
总结
这里主要考察的是数组的运用以及字符串如何做运算,复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。