给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
AC代码
class Solution {
public String addBinary(String a, String b) {
char[] aa = a.toCharArray();
char[] bb = b.toCharArray();
char[] cc = new char[a.length()>b.length()?a.length()+1:b.length()+1];
int na=aa.length-1;
int nb=bb.length-1;
int len = cc.length-1;
char t='0';
while(na>=0&&nb>=0) {
if((Integer.parseInt(aa[na]+"")+Integer.parseInt(bb[nb]+"")+Integer.parseInt(t+""))==0) {
cc[len--]='0';
na--;
nb--;
}else if((Integer.parseInt(aa[na]+"")+Integer.parseInt(bb[nb]+"")+Integer.parseInt(t+""))==1) {
cc[len--]='1';
t='0';
na--;
nb--;
}else if((Integer.parseInt(aa[na]+"")+Integer.parseInt(bb[nb]+"")+Integer.parseInt(t+"")==2)) {
cc[len--]='0';
t='1';
na--;
nb--;
}else {
na--;
nb--;
cc[len--]='1';
t='1';
}
}
while(na>=0) {
if(t=='1'&&aa[na]=='1') {
na--;
cc[len--]='0';
}else if(t=='1'&&aa[na]=='0') {
na--;
cc[len--]='1';
t='0';
}else {
cc[len--]=aa[na--];
}
}
while(nb>=0) {
if(t=='1'&&bb[nb]=='1') {
nb--;
cc[len--]='0';
}else if(t=='1'&&bb[nb]=='0') {
nb--;
cc[len--]='1';
t='0';
}else {
cc[len--]=bb[nb--];
}
}
if(t=='1')
cc[0]='1';
return String.valueOf(cc).trim();
}
}
总结:
未了省代码,而在if判断语句中进行了na--,nb--的运算,在没有进入if时也进行了--;而导致指针越界。