题目:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例:
代码:
- 解法一
class Solution {
public String addBinary(String a, String b) {
int al=a.length()-1;
int bl=b.length()-1;
StringBuilder result=new StringBuilder();
int carry=0;
//每一位的真正的sum=进位数+a字符串同位置的值+b字符串同位置的值
while(al>=0||bl>=0){
int sum=carry;
if(al>=0){
sum+=(a.charAt(al)-'0'); //char'0'的十进制数值为48,(a.charAt(al) -'0') 算出a字符串在al位置的十进制数值
al--;
}
if(bl>=0){
sum+=(b.charAt(bl)-'0');
bl--;
}
result.append(sum%2);
carry=sum/2; //carry=0 没有进位 carry=1 有进位 给下一次的sum上+1
}
if(carry!=0){ //判断全部相加结束后 有没有进位
result.append(1);
}
return result.reverse().toString(); //反向输出
}
}
- 解法二
//与解法一思路类似
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';
if (j >= 0) sum += b.charAt(j--) - '0';
sb.append(sum % 2);
remainder = sum / 2;
}
if (remainder != 0) {
sb.append(remainder);
}
return sb.reverse().toString();
}
}