给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
简析:就是每次把最后两位相加,再加上上次剩下来的进位,然后对2取余添加到最后的输出上,因为用了push_back所以最后需要一个逆位操作。
class Solution {
public:
string addBinary(string a, string b) {
string out = "";
int carry = 0, l1 = a.size(), l2 = b.size();
while(carry or l1 or l2)
{
if(l1)
carry += a[--l1] - '0';
if(l2)
carry += b[--l2] - '0';
out.push_back(carry%2 + '0');
carry >>= 1;
}
reverse(out.begin(), out.end());
return out;
}
};