Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
思路:
逆序扫描两个字符串,这样可以使对应的位相加。如果遇到一个字符串长于另一个,短的地方相加时用0代替。每加完以为记录进位值c(0, 1)和加完的结果位s,注意考虑进位后结果为需要s-2。将结果为附加到一个StringBuilder中。最后返回这个StringBuilder的reverse。注意循环结束之后还要再判断一下c是否为1,如果有进位需要在添加一位。
public String addBinary(String a, String b) {
if (a == null || a.length() == 0) {
return b;
}
if (b == null || b.length() == 0) {
return a;
}
StringBuilder sb = new StringBuilder();
int m = a.length();
int n = b.length();
int c = 0;
for (int i = 0; i < Math.max(m, n); i++) {
int a1, a2;
if (m - 1 - i < 0) {
a1 = 0;
} else {
a1 = a.charAt(m - 1 - i) - '0';
}
if (n - 1 - i < 0) {
a2 = 0;
} else {
a2 = b.charAt(n - 1 - i) - '0';
}
int s = a1 + a2 + c;
if (s >= 2) {
s = s - 2;
c = 1;
} else {
c = 0;
}
sb.append(s);
}
if (c == 1) {
sb.append(1);
}
return sb.reverse().toString();
}