https://leetcode.com/problems/multiply-strings/description/
题意:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。
说明:num1 和 num2 的长度小于110。
num1 和 num2 只包含数字 0-9。
num1 和 num2 均不以零开头,除非是数字 0 本身。
不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。
思路:像乘法算式计算一样,取每一位累加,具体见solution的图。
i*j
的结果位于最终的i+j,i+j+1
位置
class Solution:
def multiply(self, num1, num2):
"""
:type num1: str
:type num2: str
:rtype: str
"""
if num1 == '0' or num2 == '0':
return "0"
m = len(num1)
n = len(num2)
record = [0] * (m+n) #乘积长度不会超过两数长度之和
for i in range(m-1, -1, -1): #从个位开始
for j in range(n-1, -1, -1):
mul = (ord(num1[i]) - ord('0')) * (ord(num2[j]) - ord('0')) #计算乘积
sum = mul + record[i + j + 1] #与上一位累加
record[i+j] += sum // 10
record[i+j+1] = sum % 10
i = 0
while record[i] == 0: #去除前面的0
i += 1
res = ""
while i < m+n: #转换成字符
res += str(record[i])
i += 1
return res