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



原文地址:https://www.cnblogs.com/ChevisZhang/p/12240154.html