领扣67 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:“
Input: a = “11”, b = “1”
Output: "100"12
示例 2:
Input: a = “1010”, b = “1011”
Output: “10101”
public String addBinary(String a, String b) {
int len1=a.length();
int len2=b.length();
int i=len1-1;
int j=len2-1;
int c = 0,sum=0, sum1=0;
int man1,min1;
if(len1>len2) {
man1=len1;
}
else
{
man1=len2;
}
char[] num1=a.toCharArray();
char[] num2=b.toCharArray();
StringBuilder sb=new StringBuilder();
{
while(man1!=-1) {
sum = i<0?-1:(num1[i]-'0');
sum1 = j<0?-1:(num2[j]-'0');
if(sum!=-1&&sum1!=-1) { //分成不同的几种情况,所有if语句代码都是重复操作
switch(sum+sum1+c) {
case 0: sb.append(0);c=0;break;
case 1: sb.append(1);c=0;break;
case 2: sb.append(0);c=1;break;
case 3: sb.append(1);c=1;break;
}
}
else
{
if(sum==-1&&sum1!=-1)
switch(sum1+c) {
case 0: sb.append(0);c=0;break;
case 1: sb.append(1);c=0;break;
case 2: sb.append(0);c=1;break;
case 3: sb.append(1);c=1;break;
}
else
{
if(sum1==-1&&sum!=-1) //
switch(sum+c) {
case 0: sb.append(0);c=0;break;
case 1: sb.append(1);c=0;break;
case 2: sb.append(0);c=1;break;
case 3: sb.append(1);c=1;break;
}
else
{
if(sum==-1&&sum1==-1&&c!=0)
sb.append(1);
}
}
}
i--;j--;
man1--;
if(i==-1&&j==-1&&c==0)
break;
}
sb.reverse();
String result= ""+sb;
return result;
}
}