前言
数据结构与算法属于开发人员的内功,不管前端技术怎么变,框架怎么更新,版本怎么迭代,它终究是不变的内容。 始终记得在参加字节青训营的时候,月影老师说过的一句话,不要问前端学不学算法。计算机学科的每一位都有必要了解算法,有
写出高质量代码的潜意识
。
一、问题描述
给定两个字符串形式的非负整数 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('') };
后续
- 地址: 字符串相加
好了,本篇 力扣-字符串相加
到这里就结束了,我是邵小白,一个在前端领域摸爬滚打的大三学生,欢迎👍评论。