Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
class Solution {
public:
string addBinary(string a, string b) {
string str;
int c = 0, i = 0, j = 0;
for(; i<a.size() && j<b.size(); ++i, ++j){
int k = a[a.size() - 1 - i] - 48 + b[b.size() - 1 - j] - 48 + c;
str += to_string(k%2);
c = (k >= 2);
}
while (j < b.size()){
int k = b[b.size() - 1 - j] - 48 + c;
str += to_string(k%2);
c = (k >= 2);
++j;
}
while (i < a.size()){
int k = a[a.size() - 1 - i] - 48 + c;
str += to_string(k%2);
c = (k >= 2);
++i;
}
if (c)
str += "1";
return string(str.rbegin(), str.rend());
}
};
class Solution(object): def addBinary(self, a, b): """ :type a: str :type b: str :rtype: str """ return bin(int(a, 2) + int(b, 2))[2:]
string addBinary(string a, string b) { string result = ""; int apos = a.size() - 1; int bpos = b.size() - 1; int adigit, bdigit, carry = 0; while (apos >= 0 || bpos >= 0 || carry == 1) { adigit = bdigit = 0; if (apos >= 0) adigit = a[apos--] == '1'; if (bpos >= 0) bdigit = b[bpos--] == '1'; // Another way: the digit is 1 if adigit + bdigit + carry == 1 or == 3, but I noticed that // XOR is more concise: result = static_cast<char>(adigit ^ bdigit ^ carry + '0') + result; carry = adigit + bdigit + carry >= 2; } return result; }