给定两个字符串形式的非负整数 num1
和num2
,计算它们的和。
注意:
num1
和num2
的长度都小于 5100.num1
和num2
都只包含数字0-9
.num1
和num2
都不包含任何前导零。- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
解法一
不使用int的话,可以使用ord()-48的方法,但是速度好像很慢:
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
result, len1, len2 = 0, len(num1), len(num2)
def change(n):
return ord(n)-48
for i in range(len1):
result+=change(num1[-i-1])*(10**i)
for j in range(len2):
result+=change(num2[-j-1])*(10**j)
return str(result)
解法二
下面一种解法在评论区看到的,本来是用Java实现的,我换成了Py,效率仍然很高:
class Solution:
def addStrings(self, num1: str, num2: str) -> str:
result, index, i, j =[], 0, len(num1)-1, len(num2)-1
while i>=0 or j>=0 or index!=0:
if i>=0:
index+=ord(num1[i])-ord('0')
i-=1
if j>=0:
index+=ord(num2[j])-ord('0')
j-=1
result.append(index%10)
index//=10
return ''.join(str(i) for i in result)[::-1]
这个index进位设置不错,而且这一套感觉可以解很多题,在这里分享给大家。