leetcode43. 字符串相乘

题目描述:

题解:

参考思路:

https://segmentfault.com/a/1190000023612393

(1)判断特殊情况,num1 num2有一个为0时,乘积为0
(2)将num1 num2中数位较少的记为nnum2,多的记为nnum1
(3)从nnum2的个位数字开始依次与nnum1相乘(注意处理最前进位),并填充0
(4)将以上结果相加,得到数字类型的结果result
(5)将result从个位开始依次保存在数组arrres中
(6)将arrres每个数读取加入字符串strres作为最终结果
def multiply(self, num1, num2):
    if num1=="0" or num2=="0":
        return "0"
    len1 = len(num1)
    len2 = len(num2)
    minlen = min(len1,len2)
    maxlen = max(len1,len2)
    if minlen==len2:
        nnum2 = num2
        nnum1 = num1
    else:
        nnum2 = num1
        nnum1 = num2
    result = 0
    flag = 0
    weight = 1
    weight2 = 1
    for i in range(minlen-1,-1,-1):
        res = 0
        weight = 1
        for j in range(maxlen-1,-1,-1):
            a = int(nnum1[j])
            b = int(nnum2[i])
            tmp = int(a*b)
            if flag>0:
                tmp = int(tmp+flag)
                flag = 0
            flag = int(tmp/10)
            tmp = int(tmp%10)
            res = int(res+tmp*weight)
            weight = weight*10
        if flag>0:
            res=res+flag*weight
            flag = 0
        res = int(res*weight2)
        weight2 = weight2*10
        result = result+res
    arrres = []
    while result>0:
        m = int(result%10)
        result = int(result/10)
        arrres.append(m)
    strres = ""
    for i in range(len(arrres)-1,-1,-1):
        strres = strres+str(arrres[i])
    return strres

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值