原题
https://leetcode.cn/problems/multiply-strings/description/
思路
数组储存数字
复杂度
时间:O(m+n)
空间:O(m+n)
Python代码
class Solution:
def multiply(self, num1: str, num2: str) -> str:
if num1 == '0' or num2 == '0':
return '0'
ans = ''
m, n = len(num1), len(num2)
# 数组储存乘积的数字
l = [0] * (m + n)
for i in range(m -1, -1, -1):
for j in range(n-1, -1, -1):
multi = int(num1[i]) * int(num2[j])
# 乘积的个位索引
p1 = i+j+1
# 乘积的进位索引
p2 = i + j
# 加上原来位数的和
sum = multi + l[p1]
l[p1] = sum % 10
l[p2] += sum // 10
for digit in l:
# 去掉前导0
if len(ans) == 0 and digit == 0:
continue
ans += str(digit)
return ans
Go代码
func multiply(num1 string, num2 string) string {
if num1 == "0" || num2 == "0" {
return "0"
}
var ans string
m, n := len(num1), len(num2)
// 切片储存乘积的数字
l := make([]int, m+n)
for i := m - 1; i > -1; i-- {
for j := n - 1; j > -1; j-- {
multi := int(num1[i]-'0') * int(num2[j]-'0')
// 乘积的个位索引
p1 := i + j + 1
// 乘积的进位索引
p2 := i + j
// 加上原来位数的和
sum := multi + l[p1]
l[p1] = sum % 10
l[p2] += sum / 10
}
}
// 将数组转为字符串
for _, digit := range l {
// 去掉前导0
if len(ans) == 0 && digit == 0 {
continue
}
ans += string('0' + digit)
}
return ans
}
259

被折叠的 条评论
为什么被折叠?



