持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
一、题目描述:
给定两个字符串形式的非负整数 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 <= 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)