Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
public class Solution {
public String addBinary(String a, String b) {
char cha[] = a.toCharArray();
char chb[] = b.toCharArray();
char ans[] = new char[(cha.length > chb.length ? cha.length : chb.length) + 1];
char flag = '0';
int alen = cha.length - 1;
int blen = chb.length - 1;
int anslen = ans.length - 1;
while(alen >= 0 && blen >= 0){
ans[anslen] = getCur(cha[alen], chb[blen], flag);
flag = getFlag(cha[alen], chb[blen], flag);
--blen;
--alen;
--anslen;
}
if(alen < 0){
while(blen >= 0){
ans[anslen--] = getCur('0', chb[blen], flag);
flag = getFlag('0', chb[blen--], flag);
}
}
if(blen < 0){
while(alen >= 0){
ans[anslen--] = getCur('0', cha[alen], flag);
flag = getFlag('0', cha[alen--], flag);
}
}
ans[anslen] = flag;
int startindex = 0;
while(startindex < ans.length && ans[startindex] == '0'){
++startindex;
}
return startindex == ans.length ? new String("0") : new String(ans, startindex, ans.length - startindex);
}
public char getCur(char a, char b, char c){
return (char)((a + b + c - 3 * Integer.valueOf('0')) % 2 + '0');
}
public char getFlag(char a, char b, char c){
return (char)((a + b + c - 3 * Integer.valueOf('0')) / 2 + '0');
}
}