LeetCode刷题之“字符串相加“的python解法之一

  1. 字符串相加
    给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。

注意:

num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
通过次数60,035提交次数116,475

class Solution:
    def addStrings(self, num1, num2):
        #保存每一位计算的结果
        res_list = []
        #保存两个字符串的长度
        n1_length = len(num1)
        n2_length = len(num2)
        #将短的那个在左端补0使其和长的那个一样长,方便计算
        if n1_length > n2_length:
            num2 = num2.rjust(n1_length, "0")
        if n2_length > n1_length:
            num1 = num1.rjust(n2_length, "0")
        #保存补齐后的两个字符串的长度
        n1_pre_length = len(num1)
        n2_pre_length = len(num2)
        #利用列竖式的方法遍历求和
        #当前进位为0,即最开始没有进位
        carry_bit = 0
        for i in range(n1_pre_length):
            #将当前位置的字符转化为整数
            int_n1 = int(num1[n1_pre_length-i-1])
            int_n2 = int(num2[n2_pre_length-i-1])
            #计算求和后的该位置的字符
            r = (int_n1 + int_n2 + carry_bit) % 10
            #计算当前位置往前一位进位的字符数
            carry_bit = int((int_n1 + int_n2 + carry_bit) / 10)
            #将求出的字符数保存在列表中
            res_list.append(str(r))
        #判断最后一位是否有进位,若有则保存进列表
        if carry_bit > 0:
            res_list.append(str(carry_bit))
        #将列表逆置转为字符串返回
        res_list = res_list[::-1]
        res_str = "".join(res_list)
        return res_str

sl = Solution()
r = sl.addStrings("199999999999999999999999999999999999999999", "954512132323230000000000000")
print(r)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值