字符串相乘

LeetCode 第43题

问题描述

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

示例 1:

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

示例 2:

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

说明:

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

解题思路

数字乘法

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class Solution:
def multiply(self, num1, num2):
"""
:type num1: str
:type num2: str
:rtype: str
"""

if num1 == '0' or num2 == '0':
return '0'

l1, l2 = len(num1), len(num2)
prd = []
for i in range(l1):
m1 = int(num1[l1-i-1])
for j in range(l2):
m2 = int(num2[l2-j-1])
num = m1 * m2

pos = i + j
if pos >= len(prd):
carry = num // 10
prd.append(num % 10)
else:
num = prd[pos] + num
carry = num // 10
prd[pos] = num % 10

if carry == 0:
continue

# carry > 0
if pos + 1 >= len(prd):
prd.append(carry)
else:
prd[pos+1] += carry
prd.reverse()
return ''.join(map(str, prd))
感谢你对我的支持,让我继续努力分享有用的技术和知识点