WEI-CHENG CHEN

說明

以字串的形式去做加法

解法 01:用模擬的方式

class Solution {
public:
    string addBinary(string a, string b) {
        int carry = 0; // 進位
        string ans;
        int i = a.size() - 1, j = b.size() - 1;
        while(i>-1 || j>-1 || carry!=0){
            int sum = 0; // 每一位一位的加總
            if(i>=0){
                sum+= a[i]-'0';
                i--;
            }
            if(j>=0){
                sum+= b[j]-'0';
                j--;
            }
            sum+=carry;

            ans+= (sum%2)+'0';
            carry = sum/=2;

        }
        // 反轉
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

解法 02:

解法 01 會發現,他是要從右邊往左(for 迴圈–)

然後最後答案又要再反轉

那還不如,一開始講字串 a b 反轉,後面的都不用做了

class Solution {
public:
    string addBinary(string a, string b) {
        int carry = 0;
        string ans;
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());

        int n = max(a.size(), b.size());
        for (int i = 0; i < n || carry; i++) {
            int sum = carry;
            if (i < a.size()) sum += a[i] - '0';
            if (i < b.size()) sum += b[i] - '0';
            ans += (sum % 2) + '0';
            carry = sum / 2;
        }

        reverse(ans.begin(), ans.end());
        return ans;
    }
};