当前位置:网站首页>LeetCode 415. 字符串相加 和 43. 字符串相乘
LeetCode 415. 字符串相加 和 43. 字符串相乘
2022-07-27 21:52:00 【学代码的咸鱼】
这两个题目是关于string类的相关使用的练习题。同时,这也是关于大数运算的题目,让我们来分析一下吧!
字符串相加
难度 简单OJ链接

我们以示例2来讲解这题思路:
首先,我们用两个下标指向两个字符串最后的位置。然后让这两个数相加6+7=13,所以这里我们要进1。
然后将3头插到一个新的字符串里。然后下标往前移一位。
5+7=12,12还要加进位上的数12+1=13,13那么还要进位,进位还是1。我们把3头插到新的字符串里,然后下标再往前移一位。
此时,有一个字符串结束了。但此时还不能结束,我们把剩下的位置都看作0。也就是4+0+1(进位)=5。5是小于10的不需要进位,我们就把进位改为0。然后我们把5再头插到新字符串里。
此时两个字符串的数都结束了,才是真正的结束。
那么,我们再看这道题的写法:
首先,我们要把进位设为0,因为一开始两个数相加没有进位。这里,为什么会用三目操作符呢?原因是:可能有一个字符串先结束,如果结束了,我们还去取那里的位置就会出现越界了。所以如果有一个先结束,我们就直接给0。还有这里我们减了一个字符0,如果我们没有减字符0,那么我们取的是字符数字。像’1’的ASCII值为49,而我们需要的数字就是1,所以要减去一个字符0。
如果相加的数大于9,那么我们就把进位设为1,没有的话就改为0。
然后我们再把每一个字符头插进去。此时我们也需要把字符0加上才行。
但此时还有一点问题:就是如果’9’+'1’这个字符串,按照上面的写法9+1=10,是大于9的,然后减10,ret=0,carry=1。把字符0插入字符串里,然后end1–,end2–,循环就结束。此时字符串里只有一个0,没有1。所以我们还要再判断一下。
但是每次的头插它的时间复杂度是O(N^2),所以时间上会很慢。我们可以这样去写:
我们直接尾插,当所有的数尾插完了。我们再把全部给翻转过来。这样的时间复杂度为O(N)。
字符串相乘
难度 简单OJ链接
思路流程:
我们以下面的数据为例:
根据我们小学时学习的乘法。47=28,我们要把8留下,然后进2。但是在这里,我们先不进位。而是把28保留下来。后面37=21也不进位把它保留下来。所有的计算都不进位。
然后,我们把每一列的数全加起来。
此时,我们再从后往前,一位一位的开始进位。
下面就开始一步一步来实现:
第一步:如果这两个字符串当中有一个字符串为空字符串,则直接返回空字符串。
第二步:开辟一个数组,把每次的数据累计到数组中。
这里我们先计算了两个字符串的长度m,n。而这个数组该开多大呢?举个例子:100100=10000,两个三位数相乘,最小的是5位数。999999=998001,两个三位数相乘,最大的是6位数。所以,我们就开辟m+n个空间就足以放下。因为最小是m+n-1,最大是m+n,然后我们再把里面的空间初始化0。
第三步:两个字符串的数字从后往前每一位相乘,然后累加到数组里。
这里可能有的同学不知道为什么是i+j+1?
这是两个字符串的下标位置。
这是数组里数据的下标位置显示。我们看到4 * 7=28,28在数组下标为6的地方,此时的i为3,j为2,所以2+3+1=6。像3*7=21,在数组下标为5的地方,此时i为2,j为2,所以2+2+1=5。其它的也是一样的道理。
第四步:将数组里的数据开始每一位进位。
第五步:将数组里的数据从头开始尾插到新字符串中。
可能有的同学不知道这是什么意思?这是判断数组开头有没有数据。如果开头是0,说明没有进位进到开头处。我们只需从数组下标为1的地方开始尾插。如果不是0,说明有进位进到开头处,我们需要从数组下标为0的地方开始尾插。
好了,这两道题我们以讲解完毕。如果大家觉得有帮助,可以点赞收藏一下。谢谢大家!!!
边栏推荐
- Microsoft Amazon layoffs, the economic crisis is getting closer...
- [21 day learning challenge] classmate K invites you to participate in the in-depth learning seminar
- 永州出入境检验实验室建设那些事
- What has the metauniverse of more than 30 years brought to us?
- Harmonyos 3 pure mode can limit the access to personal data of risk applications detected in Huawei's application market
- 北欧岗位制博士申请有多难?
- 强强协同,共拓发展!英特尔与太一物联举办 AI 计算盒聚合服务研讨会
- Those "experiences and traps" in the data center
- 荣耀多款产品齐发,笔记本MagicBook V 14售价6199元起
- Precautions for site selection of Yongzhou clean animal laboratory
猜你喜欢

服务器中毒了——菜是原罪

Analysis and solution of errors in symbols uploading when baget manages packages

千万播放竟有通用公式?B站被小看的爆款机会!

MFC提示this application has requested the runtime to terminate it in an unusual way editbox框已经删了还在使用

MATLAB如何将k线图设置为经典红绿配色?

MATLAB | 那些你不得不知道的MATLAB小技巧(二)

英特尔携手汉朔、微软,释放“AI + 零售”大招!

荣耀多款产品齐发,笔记本MagicBook V 14售价6199元起

Intel joins hands with hanshuo and Microsoft to release the "Ai + retail" trick!

JS ATM output
随机推荐
Prepare for the interview and stick to the third sentence of the question - Branch sentences!
MATLAB如何将k线图设置为经典红绿配色?
[flight control development foundation tutorial 6] crazy shell · open source formation UAV SPI (six axis sensor data acquisition)
R语言使用hexSticker包将ggplot2包可视化的结果转换为六角图(六角贴、六角形贴纸、ggplot2 plot to hex sticker)
The construction of Yongzhou entry exit inspection laboratory
Shell programming specifications and variables
Window function over
[gwctf 2019] boring lottery
数据中台的那些“经验与陷阱”
How to realize fast recognition of oversized images
7月第3周榜单丨飞瓜数据B站UP主排行榜发布!
In the third week of July, the list of feigua data station B up main ranking list was released!
JS 事件传播 捕获阶段 冒泡阶段 onclick addEventListener
C语言实现五子棋游戏
【读书会第13期】音视频文件的封装格式
JS ATM机输出
洛谷 P1009 [NOIP1998 普及组] 阶乘之和
Database tuning - principle analysis and JMeter case sharing
火狐浏览器 Firefox 103 发布,提升高刷新率显示器下的性能
JVM memory model