LeetCode——43.字符串相乘

class Solution:
    def multiply(self, num1: str, num2: str) -> str:
        #return str(int(num1)*int(num2))

        if num1=='0' or num2=='0':
            return '0'
        
        m,n = len(num1),len(num2)
        res = [0]*(m+n)
        for i in range(m-1,-1,-1):
            for j in range(n-1,-1,-1):
                #计算当前位置相乘
                mul = int(num1[i])*int(num2[j])
                p1 = i+j
                p2 = i+j+1
                Sum = mul+res[p2]
                res[p2] = Sum%10
                res[p1] += Sum//10
        
        #return res
        #找到那些未使用的0的位置
        i = 0
        while i<len(res) and res[i]==0:
            i+=1
        
        return ''.join([str(i) for i in res[i:]])

  • 字符串与字符串相乘我们可以优化成字符与字符串相乘,然后我们在优化成字符与字符相乘,这是解决程序问题非常重要的一个思想。
  • 将庞大的一个问题不断拆分成子问题
  • 这里面就是一个多位数的一个乘法问题,在这里我们使用res去存储结果,res的长度不超过两个字符串的长度,并初始化为0
  • 使用两个指针不断去游走进行成绩,然后就可以不断更新res中的值,直到指针遍历结束
  • 接下来我们要处理初始化中未使用到的0,对他进行阉割
  • 然后将int的数组转化未字符串数组,最终转化为字符串 

 

猜你喜欢

转载自blog.csdn.net/weixin_37724529/article/details/112979599