leetcode 043 字符串相乘 Multiply Strings python

版权声明:作者:onlychristmas 欢迎转载,与人分享是进步的源泉! 转载请保留原博客地址:https://blog.csdn.net/huhehaotechangsha https://blog.csdn.net/huhehaotechangsha/article/details/88629335
所有Leetcode题目不定期汇总在 Github, 欢迎大家批评指正,讨论交流。
'''


Given two non-negative integers num1 and num2 represented as strings, return the product of num1 and num2, also represented as a string.

Example 1:

Input: num1 = "2", num2 = "3"
Output: "6"
Example 2:

Input: num1 = "123", num2 = "456"
Output: "56088"
Note:

The length of both num1 and num2 is < 110.
Both num1 and num2 contain only digits 0-9.
Both num1 and num2 do not contain any leading zero, except the number 0 itself.
You must not use any built-in BigInteger library or convert the inputs to integer directly.

'''


class Solution:
    def multiply(self, num1: str, num2: str) -> str:

        # Approach one  不符合题目要求
        # return  str(int(num1) * int(num2))



        # Approach two  采取列竖式乘法的方法, m位数乘以n位数,结果最多为m+n位数。
        if num1 == "0" or num2 == "0": return "0"
        n1 = len(num1)
        n2 = len(num2)
        result = [0 for i in range(n1 + n2)]

        def _sum(value, index):                # 存储每一位相乘的结果
            tmpIndex = n1 + n2 - 1 - index
            tmp = result[tmpIndex] + value
            if tmp > 9:
                result[tmpIndex] = tmp % 10
                _sum(tmp // 10, index + 1)
            else:
                result[tmpIndex] = tmp

        for i in range(n1):
            a = int(num1[n1 - 1 - i])
            for j in range(n2):
                b = int(num2[n2 - 1 - j])
                c = a * b
                _sum(c, i + j)  # 从0开始

        if result[0] == 0:
            return "".join([str(k) for k in result[1:]])    # 最多只有一位零
        else:
            return "".join([str(k) for k in result])

所有Leetcode题目不定期汇总在 Github, 欢迎大家批评指正,讨论交流。

猜你喜欢

转载自blog.csdn.net/huhehaotechangsha/article/details/88629335