Add Binary
Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”.
Solution1:
public String addBinary(String a, String b) {
if (a.length() > b.length()) {
return addBinary(b, a);
}
int[] result = new int[b.length() + 1];
int gap = b.length() - a.length();
for (int i = a.length() - 1; i >= 0; i--) {
addBinary(a.charAt(i), b.charAt(i + gap), result, i + gap + 1);
}
for (int i = gap - 1; i >= 0; i--) {
addBinary(b.charAt(i), '0', result, i + 1);
}
StringBuilder sb = new StringBuilder();
for (int i : result) {
if (!(sb.length() == 0 && i == 0))
sb.append(i);
}
return sb.length() == 0 ? "0" : sb.toString();
}
private void addBinary(char c1, char c2, int[] result, int index) {
int sum = (c1 - '0') + (c2 - '0') + result[index];
result[index] = sum % 2;
result[index - 1] += sum / 2;
}
Solution2:
better
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int i = a.length() - 1;
int j = b.length() - 1;
int carry = 0;
while (i >= 0 || j >= 0) {
int sum = carry;
sum += j >= 0 ? b.charAt(j--) - '0' : 0;
sum += i >= 0 ? a.charAt(i--) - '0' : 0;
sb.append(sum % 2);
carry = sum / 2;
}
if (carry != 0)
sb.append(carry);
return sb.reverse().toString();
}