LeetCode 415. 字符串相加

111 阅读1分钟
简简单单记录一下这个题目,墨迹了好长时间,题目本身也许不难,但是最近刚学Python,拿来练手 墨迹了好久

415. 字符串相加

难度简单668

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。  

Python的字符串属于不可变对象,对于字符串中的单个字符可以访问、读取,但是不能修改

示例 1:

输入: num1 = "11", num2 = "123"
输出: "134"

示例 2:

输入: num1 = "456", num2 = "77"
输出: "533"

示例 3:

输入: num1 = "0", num2 = "0"
输出: "0"

 

提示:

  • 1 <= num1.length, num2.length <= 104
  • num1 和num2 都只包含数字 0-9
  • num1 和num2 都不包含任何前导零

通过次数248,341提交次数451,683

'''
Descripttion: 知足上进 不负野心
version: 1.01
Author: Twi_etn
Date: 2023-02-05 16:11:15
LastEditors: Twi_etn
LastEditTime: 2023-02-05 16:35:59
'''
#
# @lc app=leetcode.cn id=415 lang=python3
#
# [415] 字符串相加
#

# @lc code=start
class Solution:
    def addStrings(self, num1: str, num2: str) -> str:
        num1 = num1[::-1]
        num2 = num2[::-1]
        len1,len2 = len(num1), len(num2)
        if len1 > len2:
            len1,len2 = len2,len1
            num1,num2 = num2,num1
        # 一定是字符串2长
        lenth = min(len1, len2)
        grad = 0
        ans = ''
        for i in range(0, lenth):
            a = ord(num1[i])
            a -= 48
            b = ord(num2[i])
            b -= 48
            ans = ans + chr((a + b + grad) % 10 + 48)
            grad = (a + b + grad) // 10
        for i in range(lenth, max(len1,len2)):
            b = ord(num2[i])
            b -= 48
            ans = ans + chr((b + grad) % 10 + 48)
            grad = (b + grad) // 10
        if grad:
            ans = ans + '1'
            
        ans = ans[::-1]
        return ans

# @lc code=end