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('')
};
后续
- 地址: 字符串相加
好了,本篇 力扣-字符串相加到这里就结束了,我是邵小白,一个在前端领域摸爬滚打的大三学生,欢迎👍评论。