字符串相加
题目要求
示例 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/1
int flag = 0;
//循环遍历次数为num1的长度,从num1的后向前遍历
while (len1 >= 0)
{
//使用sum变量来存储num1和num2的最后一位相加的结果
int sum = 0;
if (len2 >= 0)
{
sum += num2[len2] - '0';
}
//flag作用就是:如果上次计算结果有进位,那么本次就会+1
sum += 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;
}
};