力扣- 415. 字符串相加 🧶

167 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

前言

数据结构与算法属于开发人员的内功,不管前端技术怎么变,框架怎么更新,版本怎么迭代,它终究是不变的内容。 始终记得在参加字节青训营的时候,月影老师说过的一句话,不要问前端学不学算法。计算机学科的每一位都有必要了解算法,有写出高质量代码的潜意识

一、问题描述

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例 1:

输入:num1 = "11", num2 = "123"
输出:"134"

示例 2:

输入:num1 = "456", num2 = "77"
输出:"533"

示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"

提示:

  • 1 <= num1.length, num2.length <= 104
  • num1 和num2 都只包含数字 0-9
  • num1 和num2 都不包含任何前导零

二、思路讲解

采用双指针的方式来解决这道题。核心思路如下

  • 创建一个数组用于存储每一位的结果
  • 创建两个指针,分别指向两个值的最后一位,每次进行加法操作的时候,指针向前移动一位
  • 当指针越界的情况,进行补零操作
  • 最后存储的结果通过reverse的方式返回

三、AC代码

var addStrings = function(num1, num2) {
    let res = []
    let carry = 0 // 记录进位
    let i = num1.length - 1
    let j = num2.length - 1
    while(i >= 0 || j >= 0 || carry > 0){
        let n1 = i >= 0 ? num1[i] : 0 // 当整数长度不够的时候,缺少的位按照0计算 
        let n2 = j >= 0 ? num2[j] : 0 
        let sum = carry + (n1-0)+ (n2-0) // -0 是将字符转换为数字类型
        res.push(sum % 10) 
        console.log(res,sum)
        carry = Math.floor(sum / 10)
        i--
        j--
    }
    return res.reverse().join('')
};

后续

好了,本篇 力扣-字符串相加到这里就结束了,我是邵小白,一个在前端领域摸爬滚打的大三学生,欢迎👍评论。