43. 字符串相乘
https://leetcode-cn.com/problems/multiply-strings/
解法一:
像竖式乘法计算一样,取每一位累加 ,用i,j从后往前(低位到高位)分别遍历两个乘数,num2[i] * num1[j]
的结果位于最终的i+j,i+j+1
位置
class Solution:
def multiply(self, num1: str, num2: str) -> str:
if num1 == '0' or num2 == '0':
return "0"
m, n = len(num1), len(num2)
record = [0] * (m+n) #记录乘积,长度不会超过两数长度之和
#从低位到高位
for i in range(n-1, -1, -1): #乘数2
for j in range(m-1, -1, -1): #乘数1
#计算乘积,并与前一位的进位累加
tmp_res = int(num1[j]) * int(num2[i]) + record[i+j+1]
record[i+j] += tmp_res // 10 #本位
record[i+j+1] = tmp_res % 10 #进位
i = 0
while record[i] == 0: #跳过开头的0
i += 1
#转成字符串
res = ''
for r in range(i, m+n):
res += str(record[r])
return res
最后更新于