链接
https://leetcode-cn.com/problems/add-strings/
耗时
解题:23 min
题解:5 min
题意
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
- num1 和num2 的长度都小于 5100.
- num1 和num2 都只包含数字 0-9.
- num1 和num2 都不包含任何前导零。
- 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
思路
实现 java 大数中 BigInteger 的 .add() 功能。模拟加法运算,将 num1 作为较长的那个字符串,设置一个进位每次相加,按 num2 从尾加到头,每位放入答案,再将较长的字符串 num1 剩下的部分加上进位每位放入答案,结束后判断进位是否有剩余,有则放入答案,最后翻转答案字符串即可。
时间复杂度: O ( n ) O(n) O(n) 较长的字符串的长度
AC代码
class Solution {
public:
string addStrings(string num1, string num2) {
if(num2.size() > num1.size()) swap(num1, num2);
int n1 = num1.size();
int n2 = num2.size();
string ans;
int add = 0;
for(int i = 0; i < n2; ++i) {
int tmp = (num1[n1-i-1]-'0')+(num2[n2-i-1]-'0');
tmp += add;
ans.push_back(tmp%10+'0');
add = tmp/10;
}
for(int i = n2; i < n1; ++i) {
int tmp = (num1[n1-i-1]-'0')+add;
ans.push_back(tmp%10+'0');
add = tmp/10;
}
if(add) ans.push_back(add+'0');
reverse(ans.begin(), ans.end());
return ans;
}
};