Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
二进制相加,使用数组存下每一位带carry的相加,最长长度不会超过a.length+b.length
取较短的位数相加,较短到较长的位数,长的串和carry相加,较长到a.length+b.length这段区间,和carry相加直到进位为0
public static String addBinary(String a, String b)
{
int alen=a.length();
int blen=b.length();
int minlen=alen<blen?alen:blen;
int maxlen=alen==minlen?blen:alen;
int len=alen+blen;
int[] num=new int[len];
int carry=0;
for(int i=0;i<minlen;i++)
{
num[len-1-i]=a.charAt(alen-1-i)-'0'+b.charAt(blen-1-i)-'0'+carry;
carry=num[len-1-i]/2;
num[len-1-i]%=2;
}
for(int i=minlen;i<maxlen;i++)
{
if(alen==maxlen)
num[len-1-i]=a.charAt(alen-1-i)-'0'+carry;
else {
num[len-1-i]=b.charAt(blen-1-i)-'0'+carry;
}
carry=num[len-1-i]/2;
num[len-1-i]%=2;
}
for(int i=maxlen;i<len;i++)
{
num[len-1-i]+=carry;
carry=num[len-1-i]/2;
if(carry==0)
break;
num[len-1-i]%=2;
}
int start=-1;
for(int i=0;i<len;i++)
if(num[i]!=0)
{
start=i;
break;
}
if(start==-1)
return "0";
StringBuilder sb=new StringBuilder();
for(int i=start;i<len;i++)
sb.append(num[i]);
return sb.toString();
}