目标
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1"
输出:"100"
示例 2:
输入:a = "1010", b = "1011"
输出:"10101"
说明:
- 1 <= a.length, b.length <= 10^4
- a 和 b 仅由字符 '0' 或 '1' 组成
- 字符串如果不是 "0" ,就不含前导零
思路
对二进制字符串求和,将结果以二进制字符串的形式返回。
代码
/**
* @date 2024-05-25 21:50
*/
public class AddBinary67 {
public String addBinary_new(String a, String b) {
int al = a.length();
int bl = b.length();
int n = Math.max(a.length(), b.length());
int i = 1;
StringBuilder sb = new StringBuilder();
// 进位
int j = 0;
while (i <= n) {
int av = 0;
// 计算从右侧起第 i 个位置的下标
int ai = al - i;
if (ai >= 0) {
av = a.charAt(ai) - '0';
}
int bv = 0;
int bi = bl - i;
if (bi >= 0) {
bv = b.charAt(bi) - '0';
}
int sum = av + bv + j;
if (sum > 1) {
sb.append(sum - 2);
j = 1;
} else {
sb.append(sum);
j = 0;
}
i++;
}
if (j == 1) {
sb.append(j);
}
return sb.reverse().toString();
}
}
性能
