415. 字符串相加模拟Easy
Posted pre_eminent
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了415. 字符串相加模拟Easy相关的知识,希望对你有一定的参考价值。
难度简单
给定两个字符串形式的非负整数 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
都不包含任何前导零
思路:
1. 模拟手写加法
2.indexI, indexJ分别从两个数的最后面开始
3.while循环条件:carry不为0,或者 indexI, indexJ 没到头,就一直循环
解答:
/**
* @param string num1
* @param string num2
* @return string
*/
var addStrings = function(num1, num2)
// 模拟手写加法,即:
// 模拟「竖式加法」
// 两个指针从后往前
let lastI = num1.length - 1;
let lastJ = num2.length - 1;
// console.log(`$lastI - $lastJ`);
// 进位
let carry = 0;
let res = [];
// 3者之一(有进位,或者 num1 num2的指针 还没移动到 首位)
while(lastI >= 0 || lastJ >= 0 || carry !== 0)
// 优化点:当下标为负数的时候,直接返回 0
let a = num1.charAt(lastI) - '0';
let b = num2.charAt(lastJ) - '0';
let sum = a + b + carry;
// console.log(`$a + $b = $sum`);
let mod = sum % 10;
res.push(mod);
carry = Math.floor(sum / 10);
// 利用完最后一位,指针前移
lastI--;
lastJ--;
// console.log(res);
return res.reverse().join('');
;
以上是关于415. 字符串相加模拟Easy的主要内容,如果未能解决你的问题,请参考以下文章