Nameless Site

But one day, you will stand before its decrepit gate,without really knowing why.

0%

二进制求和

来源Leetcode第67题二进制求和

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

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

示例 1:

输入: a = “11”, b = “1”
输出: “100”

与上一题一样,从末位开始相加,考虑进位信息,字符串补长到一样长,不足位补0,最后考虑进位信息。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public String addBinary(String a, String b) {
StringBuilder ans = new StringBuilder();
int carry = 0; //是否进位
for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--) {
int sum = carry;
// 获取字符串a对应的某一位的值 当i<0是 sum+=0(向前补0) 否则将原值转为int
sum += (i >= 0 ? a.charAt(i) - '0' : 0);
sum +=( j >= 0 ? b.charAt(j) - '0' : 0);
//考虑carry和a.charAt(i)、b.charAt(j)
//三者相加后10进制数分别可能为0,1,2,3
//需要转成二进制
ans.append(sum % 2);
//进位信号只有2,3会产生
carry = sum / 2;
}
// 判断最后一次计算是否有进位 有则在最前面加上1 否则原样输出
ans.append(carry == 1 ? carry : "");
//翻转后输出
return ans.reverse().toString();
}