题目
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
解题思路
模拟加法即可
除此之外,还可以利用数学性质,从前向后加,每次加完结果*10再加到后面去,省掉了自己写进位的麻烦。。。
代码
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
ans = ''
max_length = max(len(num1), len(num2))
num1 = '0' * (max_length - len(num1)) + num1
num2 = '0' * (max_length - len(num2)) + num2
carry = 0
for index in range(1, max_length + 1):
cur_digit = int(num1[-index]) + int(num2[-index]) + carry
carry = cur_digit // 10
cur_digit %= 10
ans += str(cur_digit)
if carry:
ans += str(carry)
return ans[::-1]
利用数学性质版:
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
max_length = max(len(num1), len(num2))
num1 = '0' * (max_length - len(num1)) + num1
num2 = '0' * (max_length - len(num2)) + num2
ans = 0
for ch1, ch2 in zip(num1, num2):
ans = ans * 10 + int(ch1) + int(ch2)
return str(ans)