二进制求和
题目描述:
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
-
思路:
从最低位开始一步一步进行求解,注意处理进位.
-
代码部分:
public String addBinary(String a, String b) {
int aIdx = a.length()-1;
int bIdx = b.length()-1;
int array = 0;//进位
StringBuilder sb = new StringBuilder();
//从低位开始算起
while(aIdx>=0&&bIdx>=0){
int cur = (a.charAt(aIdx) - '0') + (b.charAt(bIdx) - '0');
cur += array;
sb.append("" + cur %2);
array = cur / 2;
aIdx --;
bIdx --;
}
while(aIdx >= 0){//a有剩余
int cur = a.charAt(aIdx) - '0' + array;
sb.append(cur % 2);
array = cur / 2;
aIdx --;
}
while(bIdx >= 0){//b有剩余
int cur = b.charAt(bIdx) - '0' + array;
sb.append(cur % 2);
array = cur / 2;
bIdx --;
}
//可以将三部分整合为一个部分
//while(aIdx >=0 || bIdx >= 0){
// int cur += array;
// if(aIdx >= 0) cur += a.charAt(aIdx--) - '0';
// if(bIdx >= 0) cur += a.charAt(bIdx--) - '0';
// sb.append(cur % 2);
// array = cur / 2;
//}
//处理最后的进位
while(array > 0){
sb.append(array % 2);
array /= 2;
}
return sb.reverse().toString();
}