方法一:
class Solution {
public String addBinary(String a, String b) {
int len1 = a.length();
int len2 = b.length();
int len = len1 <= len2 ? len1 : len2;
a = new StringBuffer(a).reverse().toString();
b = new StringBuffer(b).reverse().toString();
StringBuffer sb = new StringBuffer();
int temp = 0;
for (int i = 0; i < len; i++) {
int sum = a.charAt(i) + b.charAt(i) - 2 * '0' + temp;
if (sum >= 2) {
temp = 1;
sb.append(sum - 2);
} else {
temp = 0;
sb.append(sum);
}
}
if (len1 >= len2) {
for (int i = len; i < len1; i++) {
int sum = temp + a.charAt(i) - '0';
if (sum >= 2) {
temp = 1;
sb.append(sum - 2);
} else {
temp = 0;
sb.append(sum);
}
}
if (temp == 1) {
sb.append(1);
}
} else {
for (int i = len; i < len2; i++) {
int sum = temp + b.charAt(i) - '0';
if (sum >= 2) {
temp = 1;
sb.append(sum - 2);
} else {
temp = 0;
sb.append(sum);
}
}
if (temp == 1) {
sb.append(1);
}
}
return sb.reverse().toString();
}
}
方法二:
class Solution {
public String addBinary(String a, String b) {
int len1 = a.length() - 1;
int len2 = b.length() - 1;
StringBuffer sb = new StringBuffer();
int carry = 0;
while (carry == 1 || len1 >= 0 || len2 >= 0) {
if(len1 >= 0 && a.charAt(len1--) == '1') {
carry++;
}
if(len2 >= 0 && b.charAt(len2--) == '1') {
carry++;
}
sb.append(carry % 2);
carry = carry / 2;
}
return sb.reverse().toString();
}
}