LeetCode 67. 二进制求和
描述
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = “11”, b = “1”
输出:“100”
示例 2:
输入:a = “1010”, b = “1011”
输出:“10101”
提示:
1 <= a.length, b.length <= 104
a 和 b 仅由字符 '0' 或 '1' 组成
字符串如果不是 "0" ,就不含前导零
题解
class Solution {
public String addBinary(String a, String b) {
// 两个二进制字符串求和
StringBuilder sb =new StringBuilder();
// a 短 b 长
if(a.length()>b.length()){
String tmp = a;
a = b;
b = tmp;
}
// 二进制计算
boolean flag = false;
for(int i =0;i<b.length();i++){
char cb = b.charAt(b.length()-1-i);
if(a.length()-i-1 < 0){
// 到头了
// 只剩b
if(cb=='1' && flag){
sb.append('0');
flag =true;
continue;
}
if(cb=='0' && flag ){
sb.append('1');
flag =false;
continue;
}
if(cb =='1' && !flag){
sb.append('1');
flag =false;
continue;
}
if(cb =='0' && !flag){
sb.append('0');
flag =false;
continue;
}
}else{
char ca = a.charAt(a.length()-1-i);
if(ca=='1' && cb=='1' && !flag){
sb.append('0');
flag=true;
continue;
}
if(ca =='1' && cb =='1' && flag){
sb.append('1');
flag = true;
continue;
}
if((ca == '1' && cb =='0') || (ca == '0' && cb=='1') ){
if(flag){
sb.append('0');
flag = true;
continue;
}else{
sb.append('1');
flag = false;
continue;
}
}
if(ca =='0' && cb=='0' && flag){
sb.append(1);
flag =false;
continue;
}
if(ca =='0' && cb=='0' && !flag){
sb.append(0);
flag =false;
continue;
}
}
}
if(flag){
sb.append('1');
}
return sb.reverse().toString();
}
}