力扣-67-二进制求和

题目:

67. Add Binary(easy)


代码思路:
初步想法是:借用”two sum”问题常用框架,利用栈从右到左取数,依次计算。
其次,因为本身两个参数就是字符串,所以可以直接取下标从右往左算,更省空间更简便;
最后java还提供了一个直接算二进制字符串的方法。


代码:

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
法一:
public String addBinary(String a, String b) {
Stack<Integer> stack1 = new Stack<>();
Stack<Integer> stack2 = new Stack<>();
StringBuilder sb = new StringBuilder();
int carry = 0;
for(int i = 0;i<a.length();i++){
stack1.push(a.charAt(i) - '0');
}
for(int i = 0;i<b.length();i++){
stack2.push(b.charAt(i) - '0');
}

while(!stack1.isEmpty() || !stack2.isEmpty() || carry != 0){
int x = stack1.isEmpty() ? 0 : stack1.pop();
int y = stack2.isEmpty() ? 0 : stack2.pop();
int sum = x + y + carry;
carry = sum / 2;
sum %= 2;

sb.append(sum);
}

return sb.reverse().toString();
}
法二:
public String addBinary(String a, String b) {
StringBuilder ans = new StringBuilder();
int ca = 0;
for(int i = a.length() - 1, j = b.length() - 1;i >= 0 || j >= 0; i--, j--) {
int sum = ca;
sum += i >= 0 ? a.charAt(i) - '0' : 0;
sum += j >= 0 ? b.charAt(j) - '0' : 0;
ans.append(sum % 2);
ca = sum / 2;
}
ans.append(ca == 1 ? ca : "");
return ans.reverse().toString();
}
法三:
public String addBinary(String a, String b) {
return Integer.toBinaryString(
Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
);
}