Python学习日记——字符串相加

Python学习日记012——字符串相加

题目来源:LeetCode题库——字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
提示:
num1 和num2 的长度都小于 5100
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
Example1:
输入: “123” , “123”
输出: “246”
Example2:
输入: “1” , “9”
输出: “10”
链接:https://leetcode-cn.com/problems/add-string

字符串相加——双指针模拟竖式加法
解决这个问题,我们可以借用竖式加法计算的思路。
我们用两个指针 i , j 分别由后向前进行每一位的加法运算,用数组 result 储存结果,用 num 表示由后向前每一位加和得到的结果,用 reverse 表示加和后每一位保留下来储存到结果中的数字,用 carry 表示需要向前进位的数。需要注意的是,当两个数字位数不同时,当指针走过某一个数字的首部时,其后计算加和时,给该位赋值为0,以方便后续计算。
下面我们可以模拟一个竖式加法的计算过程(1864 + 198377):
①num = 4+7+carry = 4+7+0 = 11,reserve = 11%10 = 1,carry = 11//10 =1,result = “1”
②num = 6+7+carry = 6+7+1 = 14,reserve = 14%10 = 4,carry = 14//10 =1,result = “41”
③num = 8+3+carry = 8+3+1 = 12,reserve = 12%10 = 2,carry = 12//10 =1,result = “241”
④num = 1+8+carry = 1+8+1 = 10,reserve = 10%10 = 0,carry = 10//10 =1,result = “0241”
⑤num = 0+9+carry = 0+9+1 = 10,reserve = 10%10 = 0,carry = 10//10 =1,result = “00241”
⑥num = 0+1+carry = 0+1+1 = 2,reserve = 2%10 = 2,carry = 2//10 =0,result = “200241”
上述竖式加法的过程我们可以通过设置两个指针,循环加和实现。
可以发现,当遍历结束时,carry 的值为 0 。在程序编写过程中,发现一个问题,如计算 8 + 8 时,返回的是 6 ,而期望返回值是 16 。出现这个问题的原因是循环条件的设置,一次循环后,不满足m >= 0 or n >= 0 的条件,因次无法将进位 carry 的值正确加到 result 中,即缺少了一次循环是最后的 carry 值为0。这是个例,因此解决方法可以添加控制语句:如果carry值为1时,在result 值前加 1 。
具体实现过程如下:

class Solution:
    def addStrings(self, num1: str, num2: str) -> str:
        m = len(num1) - 1   
        n = len(num2) - 1
        carry = 0
        result = ''
        while m >= 0 or n >= 0:
            if m >= 0:
                i = int(num1[m])  #i,j为两个指针
            else:
                i = 0
            if n >= 0:
                j = int(num2[n])
            else:
                j = 0
            num = i + j + carry
            reserve = num % 10
            carry = num // 10
            result = str(reserve) + result
            m -= 1
            n -= 1
        
        if carry == 1:
            return "1" + result        
        
        return result
        

学习过程中,欢迎指正。

你可能感兴趣的:(python,leetcode)