字符串相加
题目要求
示例 1:
输入:num1 = “11”, num2 = “123”
输出:“134”
示例 2:
输入:num1 = “456”, num2 = “77”
输出:“533”
示例 3:
输入:num1 = “0”, num2 = “0”
输出:“0”
提示:
- 1 <= num1.length, num2.length <= 104
- num1 和num2 都只包含数字 0-9
- num1 和num2 都不包含任何前导零
解题思路:
1.首先确保num1的长度大于或等于num2的长度。
2.倒叙遍历num1,每次把 num1[len] 和 num2[len] 的字符相加放入sum中。
3.取结果的各位放入num1中。并通过sum判断是否进位。
4.需要把字符转化为数字-'0'
,nums1[i]被赋值时要+'0'
5.遍历结束后,如果仍需进位,就在nums1前添加’1’即可
C++代码:
class Solution {
public:string addStrings(string num1, string num2) {//首先确保num1的长度大于或等于num2的长度if (num1.size() < num2.size())swap(num1, num2);//使用len1和len2保存num1和num2的最后一个字符的下标int len1 = num1.size() - 1;int len2 = num2.size() - 1;//flag用来记录相加时是否有进位。0/1int flag = 0;//循环遍历次数为num1的长度,从num1的后向前遍历while (len1 >= 0){//使用sum变量来存储num1和num2的最后一位相加的结果int sum = 0;if (len2 >= 0){sum += num2[len2] - '0';}//flag作用就是:如果上次计算结果有进位,那么本次就会+1sum += num1[len1] - '0' + flag;//只取相加结果的个位数字num1[len1] = sum % 10 + '0';if (sum >= 10){flag = 1;}else{flag = 0;}//控制遍历循环--len1;--len2;}//最后一步,千万不要忘记,判断最后结果是否有进位,有的话num1的长度还会增大一位。使用insert头插if (flag == 1){ num1.insert(0, "1");}return num1;}
};