给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1"
输出:"100"示例 2:
输入:a = "1010", b = "1011"
输出:"10101"提示:
1 <= a.length, b.length <= 104a和b仅由字符'0'或'1'组成- 字符串如果不是
"0",就不含前导零
解题思路:模拟
我们之前做过类似的求和问题,其实都是一样的,只不过这道题变成了字符串形式罢了,思路都还是一样的,只不过现在变成了逢二进一!
class Solution {
public:
string addBinary(string a, string b) {
int sum = 0;
int indexa = a.size() - 1, indexb = b.size() - 1;
string ret;
while(indexa >= 0 || indexb >= 0 || sum != 0)
{
if(indexa >= 0)
{
sum += (a[indexa] - '0');
indexa--;
}
if(indexb >= 0)
{
sum += (b[indexb] - '0');
indexb--;
}
// 使用模运算获取每次要加的数,然后让其除以二,有进位的话就被留下了!
ret += to_string(sum % 2);
sum /= 2;
}
reverse(ret.begin(), ret.end());
return ret;
}
};