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

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

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

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

一、题目描述:

image.png

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


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

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

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

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

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

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

image.png

三、编码

方法一:模拟法

  • 解答该题,我们可以直接使用模拟法实现,思路如下:
  • 因为题目要求不能使用内置数据类型转化的方法,因此将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. 字符串相加

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

欢迎点赞,关注,收藏

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

image.png

好了,本次就到这里

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

我是阿兵云原生,欢迎点赞关注收藏,下次见~


相关文章
|
8月前
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
|
8月前
|
存储 算法 索引
刷题专栏(二十六):字符串中的第一个唯一字符
刷题专栏(二十六):字符串中的第一个唯一字符
107 1
刷题专栏(二十六):字符串中的第一个唯一字符
|
存储 算法 Serverless
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
75 0
代码随想录算法训练营第六天 | LeetCode 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和
|
8月前
|
算法
六六力扣刷题字符串之重复的子字符串
六六力扣刷题字符串之重复的子字符串
73 0
|
8月前
剑指Offer LeetCode 面试题17. 打印从1到最大的n位数
剑指Offer LeetCode 面试题17. 打印从1到最大的n位数
39 0
|
算法 安全
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
代码随想录算法训练营第六天| 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
|
机器学习/深度学习 Cloud Native
【刷题日记】67. 二进制求和
本次刷题日记的第 15 篇,力扣题为:67. 二进制求和 ,简单
|
前端开发 C语言 Cloud Native
【刷题日记】2. 两数相加
本次刷题日记的第 6 篇,力扣题为:2. 两数相加 ,中等
|
Cloud Native
【刷题日记】504. 七进制数
本次刷题日记的第 3 篇,力扣题为:【刷题日记】504. 七进制数 ,简单
101 0
|
索引 Cloud Native
【刷题日记】954. 二倍数对数组
本次刷题日记的第 21 篇,力扣题为:954. 二倍数对数组 ,中等

热门文章

最新文章