likes
comments
collection
share

【刷题日记】415. 字符串相加

作者站长头像
站长
· 阅读数 28

【刷题日记】415. 字符串相加

本次刷题日记的第 48 篇,力扣题为:415. 字符串相加简单

一、题目描述:

【刷题日记】415. 字符串相加

劳动节第一天,我们还要来劳动一下,见到的脑力劳动,刷一波最后这个月的最后一题,今天咱来尝试一下使用 python 解题是啥感觉

【刷题日记】415. 字符串相加

## 二、这道题考察了什么思想?你的思路是什么?

还是一样的套路,我们来看看题目给了我们那些重点信息:

  • 本题给出两个字符串参数 num1,num2
  • num1 , num2 都只包含数字 0-9
  • num1 , num2 都不包含任何前导零

我们拿到本题,读取题意后要求我们对两个只包含整数的字符串进行相加计算。同时,题目也要求不能使用数据类型转化的内置方法int().

首先,我们都知道两个整数相加,是按照从低位开始取数相加

  • 当同一位上取出的数字相加小于 10 时,结果位直接填入结果
  • 当同一位上取出的数字相加 res 大于 10 时,结果位只填入 res-10 ,进位 carry 赋值为1

【刷题日记】415. 字符串相加

三、编码

方法一:模拟法

  • 解答该题,我们可以直接使用模拟法实现,思路如下:

    • 因为题目要求不能使用内置数据类型转化的方法,因此将0~1放入在字典 numdict 中与字符串"0"~"9"映射关系
    • 定义两个双指针i,j,分别指向 num1 , num2 末尾
    • 当 i 或 j 大于等于0时,取出从 numdict 取出对应的数字,否则赋值为0.防止任意一个字符串取完后,对较短的字符串进行填补为0
    • 临时变量 tmp = n1 + n2 + carry ,carry 被赋值为 tmp / 10
    • s字符串等于 str(tmp % 10) + s
    • 这里需要判断取到最后carry的值,我们可以放在while循环判断carry != 0
    class Solution(object):
        def addStrings(self, num1, num2):
            """
            :type num1: str
            :type num2: str
            :rtype: str
            """
    
            numdict = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9} 
            i, j = len(num1)-1,len(num2)-1
            carry = 0
            s = ""
    
            while i >= 0 or j >= 0 or carry !=0:
    
                n1 = numdict[num1[i]] if i >= 0 else 0
                n2 = numdict[num2[j]] if j >= 0 else 0
                tmp = n1 + n2 + carry
                s = str(tmp % 10) + s
                carry = tmp / 10
    
                i = i - 1
                j = j - 1
    
            return s
    

方法二: eval()方法

这个方式咱们工作的时候倒是可以用一下, 直接使用 python 里面的库来进行处理

  • python中,eval() 方法可以直接对字符串进行计算

    • python中一行代码就可以解决
    return str(eval(num1) + eval(num2))
    

四、总结:

按照我们这样的编码方式,时间复杂度和空间复杂度分别是多少呢?

时间复杂度 O(max(num1,num2)) , 遍历较长的字符串就结束

空间复杂度O(1),我们只引入了常数级别的空间消耗

原题地址:415. 字符串相加

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

【刷题日记】415. 字符串相加

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~