题目描述:
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
方法一:
class Solution {
public:
string addBinary(string a, string b) {
//将较短的那个字符串前面补0
while (a.size() > b.size())
{
b = "0" + b;
}
while (a.size() < b.size())
{
a = "0" + a;
}
int n = a.size();
bool iscarry = false; //判断是否进位
bool tempiscarry;
string ans(n,'0');
for (int i = n - 1; i >= 0; i--)
{
tempiscarry = iscarry;
iscarry = false;
//先计算同一位置上的两个数字之和
if (a[i] == '0' && b[i] == '0')
{
ans[i] = '0';
}
else if ((a[i] == '0' && b[i] == '1') || (a[i] == '1' && b[i] == '0'))
{
ans[i] = '1';
}
else if (a[i] == '1' && b[i] == '1')
{
ans[i] = '0';
iscarry = true;
}
if (tempiscarry) //再判断当前是否有进位
{
if (ans[i] == '0')
{
ans[i] = '1';
}
else if (ans[i] == '1')
{
ans[i] = '0';
iscarry = true;
}
}
}
if (iscarry) //判断最高位是否有进位
{
ans = "1" + ans;
}
return ans;
}
};
先将两个字符串长度补全到相等,方便计算,计算时就按照人类的思维方式,从低位向高位逐步计算,判断是否要向前进位。