1. 程式人生 > >LeetCode 67. 二進位制求和(C++)

LeetCode 67. 二進位制求和(C++)

給定兩個二進位制字串,返回他們的和(用二進位制表示)。

輸入為非空字串且只包含數字 1 和 0

示例 1:

輸入: a = "11", b = "1"
輸出: "100"

示例 2:

輸入: a = "1010", b = "1011"
輸出: "10101"

C++

class Solution {
public:
    string addBinary(string a, string b) 
    {
        string res="";
        reverse(a.begin(),a.end());
        reverse(b.begin(),b.end());
        if(a.size()<b.size())
        {
            string c=a;
            a=b;
            b=c;
        }
        int m=a.size();
        int n=b.size();
        int temp=0;
        for(int i=0;i<n;i++)
        {
            int bit=(a[i]-'0')+(b[i]-'0')+temp;
            if(bit>=2)
            {
                res+=(bit%2+'0');
                temp=1;
            }
            else
            {
                res+=(bit+'0');
                temp=0;
            }
        }
        for(int i=n;i<m;i++)
        {
            int bit=(a[i]-'0')+temp;
            if(bit>=2)
            {
                res+=(bit%2+'0');
                temp=1;
            }
            else
            {
                res+=(bit+'0');
                temp=0;
            }
        }
        if(temp==1)
        {
            res+='1';
        }
        reverse(res.begin(),res.end());
        return res;        
    }
};