python-leetcode-43. 字符串相乘

43. 字符串相乘 - 力扣(LeetCode)

可以使用模拟竖式乘法的方法来实现这个功能。以下是 Python 代码实现:

def multiply(num1: str, num2: str) -> str:
    if num1 == "0" or num2 == "0":
        return "0"
    
    len1, len2 = len(num1), len(num2)
    result = [0] * (len1 + len2)
    
    for i in range(len1 - 1, -1, -1):
        for j in range(len2 - 1, -1, -1):
            mul = (ord(num1[i]) - ord('0')) * (ord(num2[j]) - ord('0'))
            pos1, pos2 = i + j, i + j + 1
            total = mul + result[pos2]
            result[pos2] = total % 10
            result[pos1] += total // 10
    
    result_str = ''.join(map(str, result))
    return result_str.lstrip('0')

代码解释:

  1. 特殊情况处理:如果 num1num2 其中一个是 "0",直接返回 "0"
  2. 初始化数组:创建一个 result 数组,长度为 len(num1) + len(num2),用来存储计算结果。
  3. 模拟竖式乘法
    • num1num2 的末尾开始逐位相乘,计算乘积 mul
    • 计算该乘积应当存放的位置 pos1pos2
    • 进行进位处理。
  4. 去除前导零:最终转换成字符串,并去掉可能的前导零。

这样,我们就能正确计算两个字符串表示的非负整数的乘积。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值