我们解析一下题目
我们知道,十进制的加减法需要进位,例如:9+7=16是因为9+1之后进了一位,二进制也是如此,只不过十进制是逢10进1,二进制是逢2进1. 但是我们这里还需要注意两点
先说结论
因为按照我们的习惯,加法喜欢从后面往前开始依次加 所以我们这里定义一个循环 {
这里的carry的值可能会出现三种情况
class Solution {
public:
string addBinary(string a, string b) {
int i=a.size()-1;
int j=b.size()-1;
int carry=0;
string result;
while(i>=0||j>=0||carry>0)
{
int sum=carry;
if(i>=0)
{
sum+=a[i]-'0';
i--;
}
if(j>=0)
{
sum+=b[j]-'0';
j--;
}
result.push_back((sum%2)+'0');
carry=sum/2;
}
reverse(result.begin(),result.end());
return result;
}
};
时间复杂度: