Add Binary

字符串形式的二進制之和(Leetcode)

QUESTION:
Given two binary strings, return their sum (also a binary string).The input strings are both non-empty and contains only characters 1 or 0.

Example 1:
Input: a = "11", b = "1"
Output: "100"

Example 2:
Input: a = "1010", b = "1011"
Output: "10101"

//分析:
設兩個待相加的字符串 爲 a 和 b, i = a.length()-1 j = b.length() - 1
字符串形式的二進制之和,重點在於關注進位問題,1+1會產生進位,爲方便處理,可以將字符串通過’0’,轉化爲 ascii碼形式 的 0 和1 ;從而相加減方便很多。

int tmp;
tmp = '1' - '0' 轉化爲 1
tmp = '0' - '0' 轉化爲 0

設置 int c = 0來處理進位問題,然後將 字符串二進制 問題 轉化爲 數學二進制相加 問題,

結束條件:只要還有未相加的位,或者 還有進位未處理,則相加不結束

用進制保留 位c去與 字符串a,b相加(轉化爲數字),如果該字符串已經遍歷完畢則 用 0來代替該字符串相加位
表示 爲

 c += i >= 0 ? a[i--] - '0':0;   //c與字符串a第i位相加
 c += j >= 0 ? b[j--] - '0':0;  //c與a相加後 與b的第j位相加

這其中 >=的優先級最高,然後是 條件運算符 ?:,最後是 +=運算符
所以表達的意思是, 如果字符串a還未運算完畢,則取其 a[i–],否則用0來代替,b一樣

由於是二進制,所以相加結果 只能是 0,1或2,要轉換爲2 進制,壓入字符串中
c%2 表示相加後 該位 的和,c/2表示 相加後是否產生進位

   s = char(c%2 + '0' ) + s 
   c = c/2; 

完整代碼:

class Solution {
public:
    string addBinary(string a, string b) 
    {
        int i = a.length() - 1;
        int j = b.length() - 1;
        int c = 0;
        string s = "";
        while( i >=0 || j >= 0 || c == 1)
        {
            c +=  i >= 0 ? a[i--] - '0':0;
            c += j >= 0 ? b[j--] - '0':0;
            s = char(c%2 + '0') + s;
            c = c/2;
        }

        return s;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章