67. Add Binary

1.問題

  • 給兩個字串, 回傳他們的總和

2.想法

  • 提問: 確定是在第一個元素還是最末個元素+ 1

  • function header, parameter

  • test input

  • 說明想法

    • 由於字串的索引是由左到右, 但是bit的排列是由右到左, 因此需要先對input string做reverse, 得到結果後再做一次reverse

  • 測試計算複雜度

3.程式碼

class Solution {
public:
    string addBinary(string a, string b) {
        int index = 0, carry = 0, sum = 0, i =0;
        string res = "";
        
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());
        
        while(index < a.length() && index < b.length()) {
            sum = int(a[index] - '0') + int(b[index] - '0') + carry;
            res.push_back(char((sum % 2) + '0'));
            carry = sum / 2;
            ++index;
        }
        
        if (index < a.length()) {
            for (i = index; i < a.length(); i++) {
                sum = int(a[i] - '0') + carry;
                res.push_back(char((sum % 2) + '0'));
                carry = sum / 2;
            }
        }
        
        if (index < b.length()) {
            for (i = index; i < b.length(); i++) {
                sum = int(b[i] - '0') + carry;
                res.push_back(char((sum % 2) + '0'));
                carry = sum / 2;
            }
        }
        
        if (carry) {
            res.push_back(char(carry + '0'));
        }
        
        reverse(res.begin(), res.end());
        
        return res;
    }
};

Last updated