题解 | #大数加法#

Problem: 大数加法

思路

1.将需要处理的字符串翻转

2.但转后的字符串,从个位开始加

3.如果相加大于10,就将和的各位保存起来,十位上的数给carry

4.继续循环

5.循环结束后,将carry的数放到最后一个位置上,然后翻转答案的字符串;

解题方法

1.解决方法:一次遍历,时间复杂度:O(N)O(N),空间复杂度为 O(1)O(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刷题整合 文章被收录于专栏

都是作者刷到的一些感觉是好题整理到一起的,辛苦整理不易,麻烦给个赞,有疑问请留言

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务