2020年5月23日 星期六

LeetCode 67. Add Binary [Easy] [C++] 解題筆記

這題給定兩個 binary string(只含 '0', '1' 的 string),要求我們相加兩個 binary string。

EX:

    a = "11", b = "1"
Ans: 100

想法:
    這題基本上就是直接題意做,用一般小學學的加法方式去加,只不過10進位換成2進位,注意進位問題!

完整程式碼:

class Solution {
public:
    string addBinary(string a, string b) {
        int a_len = a.size() - 1;
        int b_len = b.size() - 1;
        string res;
        int carry = 0;
        int sum = 0;
        while (a_len >= 0 && b_len >= 0) {
            sum = (a[a_len] - '0') + (b[b_len] - '0') + carry;
            res.insert(res.begin(), (sum % 2) + '0');
            carry = sum / 2;
            a_len--;
            b_len--;
        }
        while (a_len >= 0) {
            sum = (a[a_len] - '0') + carry;
            res.insert(res.begin(), (sum % 2) + '0');
            carry = sum / 2;
            a_len--;
        }
        while (b_len >= 0) {
            sum = (b[b_len] - '0') + carry;
            res.insert(res.begin(), (sum % 2) + '0');
            carry = sum / 2;
            b_len--;
        }
        if (carry > 0) {
            res.insert(res.begin(), carry + '0');
        }
        
        return res;
    }
};

沒有留言:

張貼留言