Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
给两个字符串,描述为二进制的数值,计算 a+b并返回同样为二进制的结果。
估计是半个月之前写的代码了,今天翻虚拟机的时候找到了,于是就改了点bug提交上来了。
思路:模拟手动加法,计算时间35%左右的位置,还可以。
public static String addBinary(String a, String b) {
int p = 0;//position
String x = a.length() >= b.length() ? a : b;
String y = a.length() < b.length() ? a : b;
StringBuffer result = new StringBuffer();
//x 的长度比y长
int mark = 0;//进位
while(p < x.length())
{
char t = x.charAt(x.length() - p-1);
if( p < y.length())
{
char t2 = y.charAt(y.length() - p-1);
if(t == '1' && t2 == '1')
{
if(mark == 1)
{
result.insert(0,'1');
mark = 1;
}else
{
result.insert(0, '0');
mark = 1;
}
}
if((t == '1' && t2 == '0') || (t =='0' && t2 == '1'))
{
if(mark == 1)
{
result.insert(0, '0');
mark = 1;
}else
{
result.insert(0, '1');
mark = 0;
}
}
if(t == '0' && t2 == '0')
{
if(mark == 1)
{
result.insert(0, '1');
mark = 0;
}else
{
result.insert(0, '0');
mark = 0;
}
}
}else
{
if(mark == 1)
{
if(t == '1')
{
result.insert(0, '0');
mark = 1;
}else
{
result.insert(0, '1');
mark = 0;
}
}else
{
result.insert(0, t);
}
}
p++;
}
if(mark == 1)
{
result.insert(0, '1');
}
if(result.equals(new StringBuffer('0')))
return null;
return result.toString();
}