题解 | #大数加法#
Problem: 大数加法
思路
1.将需要处理的字符串翻转
2.但转后的字符串,从个位开始加
3.如果相加大于10,就将和的各位保存起来,十位上的数给carry
4.继续循环
5.循环结束后,将carry的数放到最后一个位置上,然后翻转答案的字符串;
解题方法
1.解决方法:一次遍历,时间复杂度:,空间复杂度为 ;
Code
class Solution {
public:
string solve(string s, string t) {
reverse(s.begin(),s.end());//翻转字符串,方便相加
reverse(t.begin(),t.end());
int n=s.size()>t.size()?s.size():t.size();//长的字符串作为限制
int carry=0;
string ans;
for(int i=0;i<n;++i)
{
carry+=i<s.size()?s[i]-'0':0;
carry+=i<t.size()?t[i]-'0':0;//叠加
ans.push_back(carry%10+'0');
carry/=10;//叠加后记得减少
}
if(carry)
{
ans.push_back('1');//如果最后还是多了,进一位
}
reverse(ans.begin(),ans.end());
return ans;
}
};
Leetcode刷题整合 文章被收录于专栏
都是作者刷到的一些感觉是好题整理到一起的,辛苦整理不易,麻烦给个赞,有疑问请留言