43、字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。

示例 1:

	输入: num1 = "2", num2 = "3"
	输出: "6"

示例 2:

	输入: num1 = "123",num2 = "456"
	输出: "56088"

说明:
1、num1 和 num2 的长度小于110。
2、num1 和 num2 只包含数字 0-9。
3、num1 和 num2 均不以零开头,除非是数字 0 本身。
4、不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。

先附代码:

class Solution:
    def multiply(self, num1: str, num2: str) -> str:
      	#方案1
        # return str(int(num1)*int(num2))
        
        #方案2
        rst=[]  # 用于存放num1每一位与num2相乘的结果
        if num1==0 or num2==0:
            return "0"
        index=0
        for i in range(len(num1),0,-1):  # 从num1最低位遍历本别与num2相乘
            rst.append(int(num2)*int(num1[i-1])*(10**index))
        index+=1 # 每次循环num1提升一位,乘以10的index次方
        return str(sum(rst))  

当一眼看到这个题的时候想到的是,type转换一下相乘然后再type转换下输出就ok了,但是这并不能体现出算法的精髓,我想对多位整数实际运算的过程进行解析编程才是它出题的目的吧!
两种方案对比
以上是两种方案的对比:第一种是将num1和num2都全部分解为0-9数字,使用两层循环分别遍历num1和num2数字,对应数字相乘可放到额外开辟的list中,当num2每前进一位就让相乘结果之和乘以10。最后对list中所有数求和即可得,这是完全根据每一位数字进行单位数×单位数,需要两层嵌套for循环!时间复杂度为O(n(n-1)/2)
相较之下,第二种方案就把num2当做一个整体,只需要遍历一次就可得,所有相乘值,num1每进一位只需要index自加1即可!方便快捷,代码见上!

猜你喜欢

转载自blog.csdn.net/m0_37833142/article/details/88088114