415. 字符串相加模拟Easy

Posted pre_eminent

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了415. 字符串相加模拟Easy相关的知识,希望对你有一定的参考价值。

415. 字符串相加

难度简单

给定两个字符串形式的非负整数 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的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode]415. 字符串相加43. 字符串相乘

LeetCode:字符串相加415

leetcode415---字符串大数相加

字符串415. 字符串相加

415. 字符串相加

36进制加法-415. 字符串相加