Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
这题在去东京的飞机上写了一遍,但纸上写没法验证。今天发现这题的方式确实跟Add two numbers链表那题很像,处理方式也非常一致,要用while里面「或语句」的判断。写法很巧妙在于,它用
if (aLen >= 0) {
...
来累积加carry,这样就可以保证即便其中一个len到头了,也能顺利执行。
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int aLen = a.length() - 1;
int bLen = b.length() - 1;
int carry = 0;
int cur = 0;
while (aLen >= 0 || bLen >= 0) {
int temp;
if (aLen >= 0) {
//注意不能直接加上charAt。。那个是ascii码
temp = a.charAt(aLen) == '0' ? 0 : 1;
carry = carry + temp;
}
if (bLen >= 0) {
temp = b.charAt(bLen) == '0' ? 0 : 1;
carry = carry + temp;
}
cur = carry % 2;
carry = carry >= 2 ? 1 : 0;
sb.insert(0, cur);
aLen--;
bLen--;
}
if (carry == 1) {
sb.insert(0, 1);
}
return sb.toString();
}
已犯错误:
注意不能直接加上charAt。。那个是ascii码