二进制求和

一、题目

67. 二进制求和

给你两个二进制字符串 ab ,以二进制字符串的形式返回它们的和。

示例 1:

输入: a = "11", b = "1"
输出:"100"

示例 2:

输入:a = "1010", b = "1011"
输出:"10101"

提示:

  • 1 <= a.length, b.length <= 104
  • ab 仅由字符 '0''1' 组成
  • 字符串如果不是 "0" ,就不含前导零

二、题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public String addBinary(String a, String b) {
StringBuilder ans = new StringBuilder();
int n = Math.max(a.length(), b.length()), pre = 0;
for (int i = 0; i < n; ++i) {
pre += i < a.length() ? (a.charAt(a.length() - 1 - i) - '0') : 0;
pre += i < b.length() ? (b.charAt(b.length() - 1 - i) - '0') : 0;
ans.append((char) (pre % 2 + '0'));
pre /= 2;
}
if (pre == 1) {
ans.append(pre);
}
return ans.reverse().toString();
}
}

image-20241216110747976

三、总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class AddBinary {

public static void main(String[] args) {
String b = "1";
String a = "11";
System.out.println(addBinary(a, b));
}

public static String addBinary(String a, String b) {
StringBuilder ans = new StringBuilder();
int n = Math.max(a.length(), b.length()), pre = 0;
for (int i = 0; i < n; ++i) {
pre += i < a.length() ? (a.charAt(a.length() - 1 - i) - '0') : 0;
pre += i < b.length() ? (b.charAt(b.length() - 1 - i) - '0') : 0;
ans.append((char) (pre % 2 + '0'));
pre /= 2;
}
if (pre == 1) {
ans.append(pre);
}
return ans.reverse().toString();
}
}