给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
class Solution {
public String addBinary(String a, String b) {
StringBuffer str;
int length;
//将a、b最大字符串值付给StringBuffer
if(a.length()>b.length()){
length=b.length();
str=new StringBuffer(a);
//将a b对应值相加 赋值给str,出现的值最高可能为2
for(int i=str.length()-1,j=b.length()-1;j>=0;j--,i--){
int temp=0;
//str.charAt(i)-'0' 将char转化为int
temp=(str.charAt(i)-'0')+(b.charAt(j)-'0');
//(char)(temp+'0'))将 int转换为char
str.setCharAt(i,(char)(temp+'0'));
}
}
else{
str=new StringBuffer(b);
length=a.length();
for(int i=str.length()-1,j=a.length()-1;j>=0;j--,i--){
int temp=0;
temp=(str.charAt(i)-'0')+(a.charAt(j)-'0');
str.setCharAt(i,(char)(temp+'0'));
}
}
//str保存了所有a、b的累加值。
for(int k=str.length()-1;k>0;k--){
//如果值为2,则需要进1
if(str.charAt(k)=='2'){
//先将本位子置0
str.setCharAt(k,'0');
//取前一个位子的值与进位值1累加
int temp1=(str.charAt(k-1)-'0')+1;
//将累加后的值赋值给前一个位子。
str.setCharAt(k-1,(char)(temp1+'0'));
}
//在累加过程中会出现值为3的位子,则将本位子置1,然后进1
if(str.charAt(k)=='3'){
str.setCharAt(k,'1');
int temp1=(str.charAt(k-1)-'0')+1;
str.setCharAt(k-1,(char)(temp1+'0'));
}
}
//第一个位子若产生进位需要单独操作,插入一个1
if(str.charAt(0)=='2'){
str.setCharAt(0,'0');
str.insert(0,'1');
}else if(str.charAt(0)=='3'){
str.setCharAt(0,'1');
str.insert(0,'1');
}
System.out.print(str.toString());
return str.toString();
}
}