给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
思想:两个字符串逐位相加得到的和为sum,用sum%2求相加结果该位的值,sum/2求进位。
得到的结果每位要么为0,要么为1。当sum=2时(a和b对应字符都是1),sum%2=0,得到相加结果中该位为0,sum/2=1,所以进位1。
class Solution {
public String addBinary(String a, String b) {
StringBuilder result=new StringBuilder();
int a1=a.length()-1;//从右向左加
int b1=b.length()-1;
int carry=0;//进位
while(a1>=0||b1>=0){
int sum=carry;
if(a1>=0){
sum+=(a.charAt(a1)-'0');
//在ascii中,字符'0','1','2' ...是升序的,所以字符减去'0'就是差值,也就是int本身
a1--;
}
if(b1>=0){
sum+=(b.charAt(b1)-'0');
b1--;
}
result.append(sum%2);//1+1=2 2%2=0 该位为0
carry=sum/2;//2/2=1 进位1
}
if(carry!=0){
result.append(1);
}
return result.reverse().toString();//反转字符串
}
}