字符串相加

98 阅读1分钟

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))

总结

这里主要考察的是数组的运用以及字符串如何做运算,复杂类型属于简单的;这道算法题还有很多种解法,这里只是给出了一个简单的解决方法(出自力扣)。