描述
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
分析
- 首先把两个字串“对齐”,给短的字符串的头部填充0,使得两个字符串等长。
- 相加分为三种情况:00,10/01,11。
- 设一个标记是否需要进位的变量,若为true,说明要进位。
class Solution {
public String addBinary(String a, String b) {
StringBuffer sba = new StringBuffer(a);
StringBuffer sbb = new StringBuffer(b);
StringBuffer sbc = new StringBuffer("");
while(sba.length() != sbb.length()){
if(sba.length()>sbb.length()){
sbb.insert(0,'0');
}else{
sba.insert(0,'0');
}
}
int i = sba.length()-1;
boolean flag = false;
while(i >= 0){
if(sba.charAt(i) == '1' && sbb.charAt(i) == '1'){
if(flag == false){
sbc.insert(0,'0');
}else{
sbc.insert(0,'1');
}
flag = true;
}
if(sba.charAt(i) == '0' && sbb.charAt(i) == '0'){
if(flag == false){
sbc.insert(0,'0');
}else{
sbc.insert(0,'1');
}
flag = false;
}
if(sba.charAt(i) == '0' && sbb.charAt(i) == '1' || sba.charAt(i) == '1' && sbb.charAt(i) == '0'){
if(flag == false){
sbc.insert(0,'1');
flag = false;
}else{
sbc.insert(0,'0');
flag = true;
}
}
i--;
}
if(flag == true){
sbc.insert(0,1);
}
return sbc.toString();
}
}