字符串数字相加减_leetcode415. 字符串相加

leetcode415. 字符串相加

给定两个字符串形式的非负整数 num1num2 ,计算它们的和。

注意:

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

方法:双指针

思路:

不能直接将字符串转为整数,我们直接使用小学算术的方式,从后到前,将每一位字符转换为数字,相加,记录是否进位,然后答案转换为字符保存。

我们使用双指针,一个指向num1,一个指向num2,首先指向最后一位,将两个指针指向的字符转换为数字相加(如果不能用直接转化的方法,可以使用ASCII码,转换为int),记录是否进位flag,两个指针都向前移动,当其中有一个指针到了最左边之后,这个数相加完了,之后只需要考虑另一个数;两个指针都结束,判断flag,如果flag=1,说明有进位,将答案+'1',最后将答案翻转,即为最后的答案。

代码:

class Solution:
    def addStrings(self, num1: str, num2: str) -> str:
        n1 = len(num1)
        n2 = len(num2)
        #p1、p2指向两个字符串的最后一位
        p1 = n1-1
        p2 = n2-1
        ans = ''
        flag = 0
        #当至少一个指针>=0,就还没结束
        while p1>=0 or p2>=0:
            #temp保存这一位的结果
            temp = 0
            if p1>=0:
                temp += int(num1[p1])
                p1 -= 1
            if p2>=0:
                temp += int(num2[p2])
                p2 -= 1
            #加上上一位的进位
            temp += flag
            #如果和大于等于10,需要进位
            flag = 1 if temp >= 10 else 0
            #转换为字符形式加入答案
            ans += str(temp%10)  
        #最后如果需要进位,加上字符'1'  
        if flag == 1:
            ans += '1'
        #翻转字符串即为答案,    
        return ans[::-1]

结果:

d163eb8377e5e89c662cef51bf4a8cb0.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值