题目

原题链接:67. 二进制求和


给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。


示例 1:

输入: a = “11”, b = “1”
输出: “100”

示例 2:

输入: a = “1010”, b = “1011”
输出: “10101”

代码

类似于高精度加法(二进制太简单了,懒得将字符转化为数字再加。干脆就直接判断了)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
class Solution {
public String addBinary(String aa, String bb) {
if(aa.length() < bb.length()) return addBinary(bb,aa);//保持 a 的长度大于 b
StringBuilder sb = new StringBuilder();
String a = new StringBuffer(aa).reverse().toString();
String b = new StringBuffer(bb).reverse().toString();
int index = 0;
int temp = 0;
while(index < a.length()){
if(index >= b.length()){
if(temp == 1){
if(a.charAt(index) == '1'){
sb.append('0');
} else {
sb.append('1');
temp = 0;
}
} else {
sb.append(a.charAt(index));
}
}else{
if(a.charAt(index) == '1' && b.charAt(index) == '1'){ // 同时为1
if(temp == 1){ // 如果有进位
sb.append('1');
}else{
sb.append('0');
temp = 1;
}
} else if(a.charAt(index) == '0' && b.charAt(index) == '0'){
if(temp == 1){
sb.append('1');
temp = 0;
} else {
sb.append('0');
}
} else { // 其中一个是1,另一个不是1
if(temp == 1){ // 如果有进位
sb.append('0');
} else {
sb.append('1');
}
}
}
index++;
}
if(temp == 1) sb.append('1');
return sb.reverse().toString();
}
}