做分销网站系统,设计方案范本,利用论坛推广网站,郑州网站优化汉狮目录
一、前言 二、字符串相加 三、共勉 一、前言 最近春招已经开始#xff0c;看周围的同学都在投递一些大厂的实习#xff0c;某为的手撕代码 --- 字符串相乘#xff0c;某讯的手撕代码 --- 字符串相减等。 于是专门去 Leetcode 上搜索了一下#xff0c;发现这类题目是面…目录
一、前言 二、字符串相加 三、共勉 一、前言 最近春招已经开始看周围的同学都在投递一些大厂的实习某为的手撕代码 --- 字符串相乘某讯的手撕代码 --- 字符串相减等。 于是专门去 Leetcode 上搜索了一下发现这类题目是面试常考的题目。只要我们熟练的 掌握四则运算熟练的掌握字符串的处理就可以迎刃而解啦 常考算法面试题分为字符串大数相加、字符串大数相乘、字符串大数相减。本次博客主要通过图例和双指针来讲解 ---- 字符串大数相加 二、字符串相加 链接415. 字符串相加 - 力扣LeetCode 题目分析 我们先假设给定的不是字符串形式的数字而是正常的非负整数则两数相加遵循正常的加法运算个位数与个位数相加十位数与十位数相加如果该位计算结果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(end10 || end20){int val1 0;if(end10){// 将字符准换为数字val1 num1[end1--] - 0;}int val2 0;if(end20){val2 num2[end2--] - 0;}int ret val1 val2 next;// 计算进位next ret/10;ret ret%10;// 写入字符串aret 0;}if(next1){a1;}reverse(a.begin(),a.end());return a;}
}; 三、共勉 以下就是我对 力扣-415-字符串相加 的理解如果有不懂和发现问题的小伙伴请在评论区说出来哦同时我还会继续更新对 字符串相乘 的理解请持续关注我哦