leetcode刷题——415. 字符串相加

题目描述

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

提示:

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

解题思路

标签:字符串
题目理解:

  • 模拟人工加法的过程,需要有一个变量来保存进位
  • 在计算时,从后往前相加
  • 因此,可以使用双指针,从后往前遍历两个字符串

算法流程:

  • temp=n1+n2+carry,计算当前位,并将temp%10添加到res的首位
  • carry=temp//10,计算进位
  • 索引溢出处理:当指针i或j走过字符串的首位后,给n1或n2赋值为0,相当于给num1或num2前面加0
  • 当遍历完num1和num2后,判断carry是否>0。如果>0,返回str(carry)+res;否则,返回res

代码

class Solution(object):
    def addStrings(self, num1, num2):
        """
        :type num1: str
        :type num2: str
        :rtype: str
        """
        i,j,carry=len(num1)-1,len(num2)-1,0
        res=""
        while i>=0 or j>=0:
            n1=ord(num1[i])-ord("0") if i>=0 else 0
            n2=ord(num2[j])-ord("0") if j>=0 else 0
            temp=n1+n2+carry
            carry=temp//10
            res=str(temp%10)+res
            i,j=i-1,j-1
        return str(carry)+res if carry>0 else res

你可能感兴趣的:(leetcode,字符串,leetcode)