leetcode第43题python版字符串相乘

leetcode第43题python版字符串相乘,第1张

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])

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/738323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存