力扣刷题(python)50天——第十六天:字符串相乘

力扣刷题(python)50天——第十六天:字符串相乘

题目描述

给定两个以字符串形式表示的非负整数 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)或直接将输入转换为整数来处理。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/multiply-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法

由于不能使用Biginteger,因此我的想法是模仿乘法的过程,先设个循环嵌套,把第一个数的每一位乘上第二个数的每一位,但这样会很麻烦

参考这张图片后思路清晰了很多:

在这里插入图片描述
根据系数的关系很容易就能求解

解答

class Solution(object):
    def multiply(self, num1, num2):
        """
        :type num1: str
        :type num2: str
        :rtype: str
        """
        if num1[0]=='0' or num2[0]=='0':
            return '0'
        num1=num1[::-1]
        num2=num2[::-1]
        l1=len(num1)
        l2=len(num2)
        len_of_final=l1+l2
        final=['0' for i in range(len_of_final)]
        for i in range(l1):
            for j in range(l2):
                s=int(num1[i])*int(num2[j])
                final[i+j]=str(s%10+int(final[i+j]))
                final[i+j+1]=str(s/10+int(final[i+j+1]))
                                 
        for i in range(len_of_final-1):
            s=int(final[i])
            final[i]=str(s%10)
            final[i+1]=str(s/10+int(final[i+1]))
        end=''
        for each in final:
            end+=each
        end=end[::-1]
        while 1:
            if end[0]=='0':
                end=end[1:]
            else:
                break
        return end

执行结果

力扣刷题(python)50天——第十六天:字符串相乘_第1张图片

参考改进:

感觉有很多题都是模拟一个过程,目前还没有其他的思路,不过可以看看优化很多的代码:

https://leetcode-cn.com/problems/multiply-strings/solution/ping-xing-cheng-fa-yu-shu-shi-cheng-fa-by-simple-2/

你可能感兴趣的:(leetcode刷题,python,字符串相乘,leetcode,力扣,乘法)