目录链接:
力扣编程题-解法汇总_分享+记录-CSDN博客
GitHub同步刷题项目:
https://github.com/September26/java-algorithms
原题链接:力扣
描述:
给定两个字符串形式的非负整数 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
都不包含任何前导零
解题思路:
/**
* 415. 字符串相加
* 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
* 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
*
* 解题思路:
* 把num1和num2转换为char类型的数组,然后从右向左取每一位上的值,两个数相加求和,如果和大于10则进位,否则直接添加和。
* 结束条件就是两个数组都遍历完成并且进位为false。
*/
代码:
class Solution415
{
public:
string addStrings(string num1, string num2)
{
std::vector<char> c1(num1.begin(), num1.end());
std::vector<char> c2(num2.begin(), num2.end());
bool isJin = false;
int i = 0;
string str = "";
while (i < num1.size() || i < num2.size() || isJin)
{
int value1 = 0;
int value2 = 0;
int index = num1.size() - i - 1;
if (index >= 0)
{
value1 = c1[index] - '0';
}
index = num2.size() - i - 1;
if (index >= 0)
{
value2 = c2[index] - '0';
}
value1 = value1 + value2;
if (isJin)
{
value1++;
isJin = false;
}
if (value1 > 10)
{
value1 -= 10;
isJin = true;
}
str.insert(0, to_string(value1));
i++;
}
return str;
}
};