题目为
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: “10101”
题解代码为
public static string AddBinary(string a, string b)
{
string maxStr = a.Length <= b.Length ? b : a;
string minStr = a.Length > b.Length ? b : a;
int subLength = Math.Abs(a.Length - b.Length);
StringBuilder sb = new StringBuilder();
bool flag = false;//进位标志 false不需进位
for (int i = maxStr.Length - 1; i >= 0; i--)
{
//进位的1
int temp = flag == true ? 1 : 0;
int sum = 0;
if (i<= subLength-1)
{
sum = (maxStr[i] == '0' ? 0 : 1);
}
else
{
sum = (minStr[i- subLength] == '0' ? 0 : 1) + (maxStr[i] == '0' ? 0 : 1);
}
if (sum==2)
{
flag = true;
if (temp==1)
{
sb.Append(1);
continue;
}
sb.Append(0);
continue;
}
else if (sum==1)
{
if (temp==1)
{
flag = true;
sb.Append(0);
continue;
}
flag = false;
sb.Append(1);
continue;
}
else
{
flag = false;
if (temp==1)
{
sb.Append(1);
continue;
}
sb.Append(0);
}
}
if (flag==true)
{
sb.Append(1);
}
char[] charArray = sb.ToString().ToCharArray();
Array.Reverse(charArray);
return new String(charArray);
}