题目大意:给定两个二进制形式的数,用字符串给出,求出二进制和,结果仍用字符串表示。
理解:以String给出的二进制数,返回的结果还用二进制表示,并且仍为字符串。首先注意进位,中间结果存放在StringBuffer中,减少内存开销。
实现:
public class Solution {
public String addBinary(String a, String b) {
StringBuffer res = new StringBuffer();
int lena = a.length(), lenb = b.length();
int i = lena - 1, j = lenb - 1;
int to = 0, x = 0, y = 0, sum = 0;
while(i >= 0 && j >= 0) {
x = a.charAt(i) - '0';
y = b.charAt(j) - '0';
sum = x + y + to;
if(sum > 1) {
sum -= 2;
to = 1;
}
else to = 0;
res.insert(0, (char)(sum + '0'));
i --;
j --;
}
while(i >= 0) {
x = a.charAt(i) - '0';
sum = x + to;
if(sum > 1) {
sum -= 2;
to = 1;
}
else to = 0;
res.insert(0, (char)(sum + '0'));
i --;
}
while(j >= 0) {
y = b.charAt(j) - '0';
sum = y + to;
if(sum > 1) {
sum -= 2;
to = 1;
}
else to = 0;
res.insert(0, (char)(sum + '0'));
j --;
}
if(to > 0) res.insert(0, "1");
return res.toString();
}
}