LeetCode题解(python)-43. 字符串相乘

孤者浪人 提交于 2019-12-08 06:27:07

LeetCode题解(python)

43. 字符串相乘

题目描述

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

示例 1:

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

示例 2:

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

说明:

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

解题心得

本题的难点在于实现乘法,其实也是按照步骤一个一个来,对应位相乘,留余数,看进位。关键是实现过程中乘法的运算是不是搞懂了。

最近太累了,参考的评论区的代码,其他的就不多写了。

解题代码

class Solution:
    def multiply(self, num1: str, num2: str) -> str:
        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])
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!