【力扣】415.字符串相加|每日一题|刷题打卡

83 阅读1分钟

一、题目描述

给定两个字符串形式的非负整数 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. 先将两个字符串通过padStart方法进行补齐
  2. 遍历字符串,从后面开始遍历,相加两个字符得到sum,定义一个变量temp用来计数,当超过sum超过10就存储起来,为后面相加的数进行加1操作
  3. 当循环结束后还需要判断temp是否为1,如果是,那么需要在最前面添加一位

三、代码答案

/**
 * @param {string} num1
 * @param {string} num2
 * @return {string}
 */
var addStrings = function (num1, num2) {
  const len = Math.max(num1.length, num2.length);
  const n1 = num1.padStart(len, 0)
  const n2 = num2.padStart(len, 0)
  let re = []
  let temp = 0
  for (var i = len - 1; i >= 0; i--) {
    let sum = +n1[i] + +n2[i]
    if (temp === 1) {
      sum += temp
      temp = 0
    }
    if (sum >= 10) {
      temp = 1
      re[i] = sum - 10
    } else {
      re[i] = sum
    }
  }
  if (temp === 1) {
    re.unshift(1)
    temp = 0
  }
  return re.join("")
};