给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
输入: a = "11", b = "1" 输出: "100"
class Solution {
public String addBinary(String a, String b) {
int i = a.length() - 1;
int j = b.length() - 1;
int carry = 0;
StringBuffer sb = new StringBuffer();
while(i>=0&&j>=0){
int sum = carry;
sum += a.charAt(i--) - '0';
sum += b.charAt(j--) - '0';
carry = sum/2;
sb.append(sum%2);
}
while(i>=0){
int sum = carry;
sum += a.charAt(i--) - '0';
carry = sum/2;
sb.append(sum%2);
}
while(j>=0){
int sum = carry;
sum += b.charAt(j--) - '0';
carry = sum/2;
sb.append(sum%2);
}
if(carry != 0){
sb.append(carry);
}
return new String(sb.reverse());
}
}
也可以写成
class Solution {
public String addBinary(String a, String b) {
int carry = 0;
StringBuilder sb = new StringBuilder();
int i = a.length() -1;
int j = b.length() -1;
while(i>=0||j>=0){
int sum = carry;
sum += i>=0?a.charAt(i--)-'0':0;
sum += j>=0?b.charAt(j--)-'0':0;
carry = sum/2;
sb.append(sum%2);
}
if(carry != 0){
sb.append(carry);
}
return new String(sb.reverse());
}
}
另外还可以先将字符串类型转换为对应的十进制数,运算完再转换为二进制
class Solution {
public String addBinary(String a, String b) {
return Integer.toBinaryString(
Integer.parseInt(a, 2) + Integer.parseInt(b, 2)
);
}
}