67.二进制求和

题目描述

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

示例 1:

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

示例 2:

1
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
17
18
19
20
21
22
23
24
class Solution {
public String addBinary(String a, String b) {
// 字符串最大索引
int aIndex = a.length() - 1;
// 字符串B的最大索引
int bIndex = b.length() - 1;
// 如果不进位是0,进位则是1
int carry = 0;
StringBuilder sb = new StringBuilder();
while (aIndex >= 0 || bIndex >= 0) {
int avi = aIndex < 0 ? 0 : a.charAt(aIndex) - '0';
int bvi = bIndex < 0 ? 0 : b.charAt(bIndex) - '0';
carry = carry + avi + bvi;
sb.append(carry % 2);
carry = carry / 2;
aIndex--;
bIndex--;
}
if (carry > 0) {
sb.append("1");
}
return sb.reverse().toString();
}
}

提交:

提交结果