日新刷题 - 415. 字符串相加

85 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

一、题目描述:

415. 字符串相加 - 力扣(LeetCode)

给定两个字符串形式的非负整数 num1num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

示例 1:

输入:num1 = "11", num2 = "123"
输出:"134"

示例 2:

输入:num1 = "456", num2 = "77"
输出:"533"

示例 3:

输入:num1 = "0", num2 = "0"
输出:"0"

提示:

  • 1 <= num1.length, num2.length <= 10^4
  • num1 和num2 都只包含数字 0-9
  • num1 和num2 都不包含任何前导零

二、思路分析:

  • 先用字符串切片将两个字符串反转
  • 利用一个for循环先将公共字符串的加法计算完
  • 然后再计算剩余的部分
  • add表示是否有进位
  • result返回的字符串
  • 代码比较冗余没优化,效率可能比双指针要高一点 执行用时 :40 ms, 在所有 Python3 提交中击败了91.35%的用户
    内存消耗 :13.4 MB, 在所有 Python3 提交中击败了29.10%的用户

三、AC 代码:

class Solution:
    def addStrings(self, num1: str, num2: str) -> str:
        if len(num1) < len(num2):
            num1, num2 = num2, num1
        num1 = num1[::-1]
        num2 = num2[::-1]
        add = 0
        result = ''
        for i, j in zip(num1, num2):
            temp = int(i) + int(j) + add
            if temp > 9:
                result += str(temp - 10)
                add = 1
            else:
                result += str(temp)
                add = 0
        if add == 0:
            result += num1[len(result):]
        elif len(result) == len(num1):
            result += '1'
        else:
            for k in range(len(result),len(num1)):
                temp = int(num1[k]) + add
                if temp > 9:
                    result += str(temp - 10)
                    add = 1
                else:
                    result += str(temp)
                    add = 0
                    break
            if add == 0:
                result += num1[len(result):]
            else:
                result += '1'
        return result[::-1]
                

四、参考:

字符串模拟加法时,不够时用0代替!!! - 字符串相加 - 力扣(LeetCode)

415. 字符串相加 字符串反向相加,一次通关 - 字符串相加 - 力扣(LeetCode)

【负雪明烛】「求加法」清晰图解,代码模板 - 字符串相加 - 力扣(LeetCode)