LeetCode67 给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。

class Solution {
public:
    string addBinary(string a, string b) {
        string s;
        int k = 0;
        int n = (a.size()<=b.size())?a.size():b.size();
        string sum = (a.size()>=b.size())?a:b;
        for(int i = 1; i <= n; ++i)
        {
            if(k==0)
            {
                if(a[a.size()-i]=='0')
                {
                    if(b[b.size()-i]=='0')
                    {
                        s.push_back('0');
                        k=0;
                    }
                    else
                    {
                        s.push_back('1');
                        k=0;

                    }
                }
                else
                {
                    if(b[b.size()-i]=='0')
                    {
                        s.push_back('1');
                        k=0;
                    }
                    else
                    {
                        s.push_back('0');
                        k=1;
                    }
                }
            }
            else
            {
                if(a[a.size()-i]=='0')
                {
                    if(b[b.size()-i]=='0')
                    {
                        s.push_back('1');
                        k=0;
                    }
                    else
                    {
                        s.push_back('0');
                        k=1;

                    }
                }
                else
                {
                    if(b[b.size()-i]=='0')
                    {
                        s.push_back('0');
                        k=1;
                    }
                    else
                    {
                        s.push_back('1');
                        k=1;
                    }
                }
            }     
        }
        for(int i=n+1; i<=sum.size(); ++i)
        {
            if(k==0)
            {
                s.push_back(sum[sum.size()-i]);
            }
            else
            {
                if(sum[sum.size()-i]=='0')
                {
                    s.push_back('1');
                    k=0;
                }
                else
                {
                    s.push_back('0');
                    k=1;
                }
            }
        }
        if(k==1)
        {
            s.push_back('1');
        }
        reverse(s.begin(), s.end());
        return s;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_40906550/article/details/82433113
今日推荐