网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
二、字符串相加
题目分析:
- 我们先假设给定的不是字符串形式的数字,而是正常的非负整数,则两数相加遵循正常的加法运算,个位数与个位数相加,十位数与十位数相加,如果该位计算结果>9,则向前进位。
- 既然我们对加法的运算非常熟悉,代码也非常好写,那我们现在的任务就是将字符串形式的数字转换为正常的数字进行算术运算。
- 那么我们应该怎样取字符串中的每一位数字呢?我们定义两个指针,分别指向两个字符串的尾,然后取出该位置的字符,并将其转换为整数形式参与运算,并将结果再次转换为字符串形式,依次进行计算。 (双指针算法)
上图中就是我们计算字符串相加的一个大概思路,但是这里需要注意几点情况:
- a:进位的情况;
- b:两个字符串长度不相等;
针对情况a:我们每次相加后要判断该值是否>9,如果>9,则要-10,前一位并+1。从而完成进位
**针对情况b:**我们对循环的结束条件进行控制,当两个指针均走到结束位置,循环才结束,仅仅一个走到头不算结束,并且先走到头的指针,其值一直为0。
整个过程的图例与解析:
- 对齐低位,即从两个字符串的末位开始从后往前计算;
- 计算每一位,当前位的和等于两个加数的当前位的数字之和再加上进位;
- 当前位的值等于当前位的和模10;
- 当前位产生的进位位等于当前位的和除以10并向下取整;
- 当两个数字的位数不一致,位数少的高位补0;
- 当计算完两个数字所有位后,进位位不为0的,即高位补1;
代码样例:
class Solution {
public:
string addStrings(string num1, string num2)
{
// 计算两个字符串的 下标 长度
int end1 = num1.size()-1 , end2 = num2.size()-1;
// 进位换算符号
int next = 0;
// 最终字符串
string a;
// 开始相加,直到两个字符串都加完为止
while(end1>=0 || end2>=0)
{
int val1 = 0;
if(end1>=0)
{
// 将字符准换为数字
val1 = num1[end1--] - '0';
}
int val2 = 0;
if(end2>=0)
![img](https://img-blog.csdnimg.cn/img_convert/200aa32588b0ba1d6943f6a87f0e729e.png)
![img](https://img-blog.csdnimg.cn/img_convert/a1b6c5b70a5dc8848cf5799235a3c26a.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**