给定两个字符串形式的非负整数 num1
和num2
,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger
), 也不能直接将输入的字符串转换为整数形式。
示例 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
都不包含任何前导零
class Solution {
public:
string addStrings(string num1, string num2) {
int end1 = num1.size() - 1;
int end2 = num2.size() - 1;
int next = 0;
string str;
while (end1 >= 0 || end2 >= 0)
{
int x1, x2;
if (end1 >= 0)
{
x1 = num1[end1--] - '0';
}
else
{
x1 = 0;
}
if (end2 >= 0)
{
x2 = num2[end2--] - '0';
}
else
{
x2 = 0;
}
int ret = x1 + x2 + next;
next = ret / 10;
ret = ret % 10;
str.insert(str.begin(), ret + '0');
}
if (next)
{
str.insert(str.begin(), next + '0');
}
return str;
}
};
但是上面这种方法时间复杂度是n^2因为这里用的是头插就很浪费时间
我这里采用的是尾插然后逆置这个字符串
class Solution {
public:
string addStrings(string num1, string num2) {
int end1 = num1.size() - 1;
int end2 = num2.size() - 1;
int next = 0;
string str;
while (end1 >= 0 || end2 >= 0)
{
int x1, x2;
if (end1 >= 0)
{
x1 = num1[end1--] - '0';
}
else
{
x1 = 0;
}
if (end2 >= 0)
{
x2 = num2[end2--] - '0';
}
else
{
x2 = 0;
}
int ret = x1 + x2 + next;
next = ret / 10;
ret = ret % 10;
str += ret + '0';
}
if (next==1)
{
str += 1 + '0';
}
reverse(str.begin(), str.end());
return str;
}
};