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

最后更新于