leetcode67二进制求和

题目

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字 1 和 0。

示例1

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

示例2

输入: a = “1010”, b = “1011”
输出: “10101”

题解

从低位对应循环加到高位,当前位相加结果%2,然后添加进StringBuilder,进位是/2,需要单独处理最后一次进位,最后反向输出字符串。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class solution {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int i =a.length()-1;
int j = b.length()-1;
int remainder =0;
while (i>=0||j>=0){
int sum =remainder;
if (i>=0) {
sum+=a.charAt(i)-'0';
i--;
}
if (j>=0) {
sum+=b.charAt(j)-'0';
j--;
}
sb.append(sum%2);
remainder = sum/2;
}
if (remainder != 0){
sb.append(remainder);
}
return sb.reverse().toString();
}

}