leetcode第43题python版字符串相乘

class Solution:
    """
    43. 字符串相乘
    给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
    """
    def multiply(self, num1: str, num2: str) -> str:
        # 思路:将两数的每一位从字符串转为整数,num1和num2倒着遍历,i位和j位相乘结果先不进位,
        # 放到结果数组的i+j+1位(找规律),后面统一处理进位问题;
        # 而且两数相乘的结果长度要么是num1 + num2位,要么是num1 + num2 - 1位
        # 1. 初始化及特殊处理
        if num1 == '0' or num2 == '0':
            return '0'
        n1 = len(num1)
        n2 = len(num2) 
        # ans_arr = [0] * (n1 * n2)
        # 易错点
        ans_arr = [0] * (n1 + n2)
        # ans = [0] * (n1 * n2)

        # 2. 处理两数每位的乘积结果
        for j in reversed(range(n2)):
            y = int(num2[j])
            for i in reversed(range(n1)):
                # 关键点:找规律j+j+1 
                # 易错点:注意是累加,因为i+j+1相同的次数比较多
               ans_arr[i+j+1] += y * int(num1[i])

        # 3. 遍历ans_arr处理进位
        # for k in reversed(range(n1 * n2)):
        for k in reversed(range(1, n1 + n2)):
            # if k == n1 * n2 - 1:
            #     ans_arr[k-1] += ans_arr[k] // 10
            #     ans_arr[k] = ans_arr[k] % 10
            ans_arr[k-1] += ans_arr[k] // 10
            ans_arr[k] %= 10
        
        # 4. 处理并返回结果值
        # ans_arr[0] == 0 ? ans_arr.del(ans_arr[0]) : None
        # ans_arr.del(ans_arr[0]) if ans_arr[0] == 0 else None
        # del(ans_arr[0]) if ans_arr[0] == 0 else None
        if ans_arr[0] == 0:
            del(ans_arr[0])
        # return ans_arr.join('')
        return ''.join([str(item) for item in ans_arr])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ICPunk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值