大数加法-模拟运算

大数加法-牛客

思路

  • 模拟运算
    从个位开始,逐渐往上累加,换到字符串中就是从两个字符串的末尾开始相加,从后往前遍历长度长的那个字符串,下标为i
    短字符串的下标j=i-len(长度长的字符串)+len(长度短的字符串)
    注意:进位标志carry=tmp//10, tmp=tmp%10
    若循环结束后,carry==1,把1加到字符串前

时间复杂度:O(n),其中n为较长字符的长度,遍历字符串
空间复杂度:O(1),常数级空间,没有使用额外辅助空间

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 计算两个数之和
# @param s string字符串 表示第一个整数
# @param t string字符串 表示第二个整数
# @return string字符串
#
class Solution:
    def solve(self , s: str, t: str) -> str:
        # write code here
        if len(s)==0:
            return t
        if len(t)==0:
            return s
        #让s为较长的,t为较短的
        if len(s)<len(t):
            temp=t
            t=s
            s=temp
        #进位标志
        carry=0
        i=len(s)-1
        while i>=0:
            #转数字加进位
            tmp=int(s[i])+carry
            #较短字符串相应从后往前的下标
            j=i-len(s)+len(t)
            if j>=0:
                tmp=tmp+int(t[j])
            #取进位
            carry=tmp//10
            #取余
            tmp=tmp%10
            s=s[:i]+str(tmp)+s[i+1:]
            i-=1
        #最后的进位
        if carry==1:
            s='1'+s
        return s    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值