#67.Add Binary
Problem statement
Given two binary strings a and b, return their sum as a binary string.
Example 1
Input: a = "11", b = "1"
Output: "100"
Example 2
Input: a = "1010", b = "1011"
Output: "10101"
Explanation
給定兩個二進位制的字串 a 和 b ,將他們相加並返回二進位制的結果
Solution
將兩字串轉換成十進位,接著兩者相加得到總和,總和在轉換成二進位得到答案
public string AddBinary(string a, string b)
{
    var x = Convert.ToInt32(a, 2);
    var y = Convert.ToInt32(b, 2);
    var res = x + y;
    return Convert.ToString(res, 2);
}
測試沒問題直接提交,得到與上一題 Plus One 相同的錯誤,果然沒這麼簡單!於是我尋思著上一題的解法,這題用相同邏輯應該不會有問題,我朝著這個方向前進,建立一個 carry 變數來紀錄是否進位,以及 sb 來合併每次執行結果,上一題 Plus One 是對一個數加一,這題是兩個數相加,沒什麼太難的問題,只是有些小細節要注意
public string AddBinary(string a, string b)
{
    // 將 a,b 補 0 直到相同長度
    int maxLen = a.Length > b.Length ? a.Length : b.Length;
    a = a.PadLeft(maxLen, '0');
    b = b.PadLeft(maxLen, '0');
    // true 表示進位, false 則無
    bool carry = false;
    StringBuilder sb = new StringBuilder();
    int add;
    maxLen--;
    // 依據各種狀況進行相加
    while (maxLen > -1)
    {
        add = a[maxLen] + b[maxLen];
        if (add == 98) // a+b=2
        {
            if (carry)
                sb.Insert(0, '1');
            else
            {
                sb.Insert(0, '0');
                carry = true;
            }
        }
        else if (add == 97) // a+b=1
        {
            if (carry)
                sb.Insert(0, '0');
            else
                sb.Insert(0, '1');
        }
        else // a+b=0
        {
            if (carry)
            {
                sb.Insert(0, '1');
                carry = false;
            }
            else
                sb.Insert(0, '0');
        }
        maxLen--;
    }
    if (carry) sb.Insert(0, '1');
    return sb.ToString();
}
Reference
Thanks for reading the article 🌷 🌻 🌼
If you like it, please don't hesitate to click heart button ❤️
or click like on my Leetcode solution
or follow my GitHub ⭐ I'd appreciate it.
 
 
              
 
    
Top comments (0)