【刷题日记】415. 字符串相加
本次刷题日记的第 48 篇,力扣题为:415. 字符串相加 ,简单
一、题目描述:
劳动节第一天,我们还要来劳动一下,见到的脑力劳动,刷一波最后这个月的最后一题,今天咱来尝试一下使用 python 解题是啥感觉
## 二、这道题考察了什么思想?你的思路是什么?
还是一样的套路,我们来看看题目给了我们那些重点信息:
- 本题给出两个字符串参数 num1,num2
- num1 , num2 都只包含数字
0-9
- num1 , num2 都不包含任何前导零
我们拿到本题,读取题意后要求我们对两个只包含整数的字符串进行相加计算。同时,题目也要求不能使用数据类型转化的内置方法int()
.
首先,我们都知道两个整数相加,是按照从低位开始取数相加
- 当同一位上取出的数字相加小于 10 时,结果位直接填入结果
- 当同一位上取出的数字相加 res 大于 10 时,结果位只填入 res-10 ,进位 carry 赋值为1
三、编码
方法一:模拟法
- 解答该题,我们可以直接使用模拟法实现,思路如下:
- 因为题目要求不能使用内置数据类型转化的方法,因此将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. 字符串相加
今天就到这里,学习所得,若有偏差,还请斧正
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力
好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~