题目 - 点击直达
- 1. 415 字符串相加 简单
- 1. 题目详情
- 1. 原题链接
- 2. 题目要求
- 3. 基础框架
- 2. 解题思路
- 1. 思路分析
- 2. 时间复杂度
- 3. 代码实现
1. 415 字符串相加 简单
1. 题目详情
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。
1. 原题链接
LeetCode 415 字符串相加 简单
2. 题目要求
示例 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 都不包含任何前导零
3. 基础框架
● Cpp代码框架
class Solution {
public:
string addStrings(string num1, string num2) {
}
};
2. 解题思路
1. 思路分析
(
1
)
(1)
(1) 大整数运算时使用整型变量存储数据很容易导致溢出,一般都会存放在字符串中,在字符串中进行运算,运算方式需要我们自己进行设计,加法就是其中的一种运算;
(
2
)
(2)
(2) 以符合我们正常思维的方式,两个数相加总是从低位开始相加,每次相加的结果处理成进位(除10)
和本位(模10)
,从低位到高位都是如此;
对于长度不相等的两个数来说:长度较长的数的未参与相加的高位相当于是与长度较短的数的对应高位(其值看做0)
依次按照上述规则相加作为结果;
(
3
)
(3)
(3) 把得到的本位(从低位开始相加的结果位)
依次尾插到空字符串中,相加结束后如果进位是1则需要再尾插一个字符1
,之后字符串内的内容就是相加结果的倒序(左低位右高位)
,只需再次把字符串逆置一次就是所需结果(左高位右低位)
;
2. 时间复杂度
O ( ) O() O()
3. 代码实现
class Solution {
public:
string addStrings(string num1, string num2) {
// 1 2 3 4 5
// 1 2 3
// 1 2 3 4 5
// 0 0 1 2 3
string ret;
int l1 = num1.size() - 1, l2 = num2.size() - 1;
// 进位
int carry = 0;
while(l1 < num1.size() || l2< num2.size()){
int n1 = l1 >= 0 ? num1[l1] - '0' : 0;
int n2 = l2 >= 0 ? num2[l2] - '0' : 0;
int add = n1 + n2 + carry;
carry = add / 10;
ret += add % 10 + '0';
l1--;
l2--;
}
if(carry == 1) ret += '1';
reverse(ret.begin(), ret.end());
return ret;
}
};
T h e The The E n d End End