43. 字符串相乘
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
本题自己乱写,在第277/311 个测试case的时候超时了, GG。
要注意的地方就是在写两数相加的函数的时候,要注意,最后一位的相加如果进位了,要注意加上去,不然就会像我一样得到:
123 + 900 = ‘023’
class Solution:
def multiply(self, num1: str, num2: str) -> str:
def add(num1,num2):
print(num1,num2)
l1,l2 = len(num1)-1,len(num2) - 1
carry = 0
res = ''
while l1>=0 or l2>=0:
s1 = int(num1[l1]) if l1 >=0 else 0
s2 = int(num2[l2]) if l2 >=0 else 0
tmp = s1 + s2 + carry
carry = tmp // 10
res = str(tmp % 10) + res
l1 -= 1
l2 -= 1
if carry == 1:
res = str(carry) + res
return res
if num1 == '0' or num2 == '0':
return '0'
res = ''
l1,l2 = len(num1) - 1, len(num2) -1
ex_multiplier = 1
for i in range(l2,-1,-1):
curRes = ''
multiplier = 1
for j in range(l1,-1,-1):
tmp = int(num1[j]) * int(num2[i]) *multiplier * ex_multiplier
curRes = add(curRes,str(tmp))
multiplier *= 10
ex_multiplier *= 10
res = add(res,curRes)
return res