题目
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1” 输出: “100” 示例 2:
输入: a = “1010”, b = “1011” 输出: “10101”
提示:
每个字符串仅由字符 ‘0’ 或 ‘1’ 组成。 1 <= a.length, b.length <= 10^4 字符串如果不是 “0”
,就都不含前导零。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-binary
解题代码
class Solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
//位数补齐,短的前面补0
while (a.length() != b.length()) {
if (a.length() < b.length()) {
a = "0" + a;
} else {
b = "0" + b;
}
}
int add = 0;//表示进位
int sum = 0;//求和
for (int i = b.length() - 1; i >= 0; i--) {
int x = a.charAt(i) - '0';
int y = b.charAt(i) - '0';
sum = x + y + add;
if (sum >= 2) {
int i1 = sum - 2;
sb.append(i1);
add = 1;
} else {
sb.append(sum);
add = 0;
}
}
//最后如果有进位前面补0
if (add == 1) {
sb.append(1);
}
return sb.reverse()toString();
}
}