1. 程式人生 > >Add Binary 二進位制求和

Add Binary 二進位制求和

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

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

示例 1:

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

示例 2:

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

思路:思維定式一開始準備用兩個數的異或操作做遞迴操作來做兩個二進位制的和,但是給定的輸入是字串,所以做異或或者操作需要重寫兩個函式並且還有考慮前導0的問題,所以discuss區有一個碉堡了的方法!!!

通過變數c來累加當前的每一位的和,並且對2取模,作為這一位的輸出,然後把c除以2,因為這道題不限制只能用0,1兩個數字,並且c的值永遠不會超過3,所以這樣可以得到正確的答案,非常巧妙。

參考程式碼:

class Solution {
public:
    string addBinary(string a, string b) {
        int c = 0, a_index = a.size() - 1, b_index = b.size() - 1;
        string res;
        while (a_index >= 0 || b_index >= 0 || c == 1) {
            c += a_index >= 0 ? a[a_index--]-'0' : 0;
            c += b_index >= 0 ? b[b_index--]-'0' : 0;
            res=(char(c % 2 + '0'))+res;
            c /= 2;
        }
        return res;
    }
};