Given two binary strings, return their sum (also a binary string). For example, a = "11" b = "1" Return "100". 1. 从后向前挨个把a,b对应的位置上的1或者0加起来, 2. 再加上上次的carrier,然后更新carrier和当前位置需要填充的值(1/0) 3. 终止条件是两个string都已经算完并且carrier为0,这就把所有的进位情况都包括了 4. 最后把存放结果的string反转并返回(因为在计算过程中,每个位置的结果是动态插入尾部的) ------------------------------ class Solution { public: string addBinary(string a, string b) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. int carrier = 0; string ret = ""; for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0 || carrier > 0; i--, j--) { int num1 = (i >= 0 ? a[i] - '0' : 0); int num2 = (j >= 0 ? b[j] - '0' : 0); int cval = num1 + num2 + carrier; carrier = cval / 2; cval %= 2; ret.push_back(cval + '0'); } reverse(ret.begin(), ret.end()); return ret; } };