题目描述:
给你两个二进制字符串,返回它们的和(用二进制表示)。输入为非空字符串且只包含数字1和0。
测试用例:
输入: a = "11", b = "1"
输出: "100"
输入: a = "1010", b = "1011"
输出: "10101"
思路:
- 定义i,j分别从a和b的末尾位置向前遍历;定义一个ret表示进位;
- 循环相加两个字符串相同长度的低位数部分;
- 如果a没完则继续遍历添加 a 的剩余部分,b也一样;
- 如果ret有进位,就将进位部分也添加进去;
代码如下:
class Solution {
public String addBinary(String a, String b) {
StringBuilder stringBuilder = new StringBuilder();
int i = a.length()-1;
int j = b.length()-1;
int ret = 0;//负责判断是否存在进位
while(i>=0 && j>=0){
int sum = ret;
sum += a.charAt(i--)-'0';
sum += b.charAt(j--)-'0';
ret = sum/2;
stringBuilder.append(sum%2);
}
while(i >= 0){
int sum = ret;
sum += a.charAt(i--)-'0';
ret = sum/2;
stringBuilder.append(sum%2);
}
while(j >= 0){
int sum = ret;
sum += b.charAt(j--)-'0';
ret = sum/2;
stringBuilder.append(sum%2);
}
if (ret == 1){
stringBuilder.append(ret);
}
return stringBuilder.reverse().toString();
}
}