题目:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字
1
和0
。示例 1:
输入: a = "11", b = "1" 输出: "100"示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
看到这个题,第一时间想到的是字符串转整数,但是这样很容易溢出。
最后在一位大神的帮助下写出了下面代码,感觉还是很好理解的
public static String addBinary(String a, String b) {
StringBuffer sb = new StringBuffer();
int alen = a.length() - 1;
int blen = b.length() - 1;
int temp = 0;
while (alen >= 0 || blen >= 0) {
int sum = temp;
if (alen >= 0)
sum = sum + (a.charAt(alen--) - '0');
if (blen >= 0)
sum = sum + (b.charAt(blen--) - '0');
sb.append(sum % 2);
temp = sum / 2;
}
if (temp != 0) {
sb.append(temp);
}
return sb.reverse().toString();
}