Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
public String addBinary(String a, String b) {
if (a == null && b == null) return null;
if (a == null || a.length() == 0) return b;
if (b == null || b.length() == 0) return a;
if (a.length() > b.length())
return addBinary(b, a);
int i = a.length() - 1;
int j = b.length() - 1;
StringBuilder sum = new StringBuilder();
int carry = 0, curr = 0;
while (i >= 0 && j >= 0) {
curr = a.charAt(i--) - '0' + b.charAt(j--) - '0' + carry;
carry = curr >> 1;
sum.append(curr >= 2 ? curr - 2 : curr);
}
while (j >= 0) {
curr = b.charAt(j--) - '0' + carry;
carry = curr >> 1;
sum.append(curr >= 2 ? curr - 2 : curr);
}
if (carry > 0)
sum.append(carry);
return sum.reverse().toString();
}