给你两个二进制字符串 a
和 b
,以二进制字符串的形式返回它们的和。
a
和 b
仅由字符 '0'
或 '1'
组成"0"
,就不含前导零输入:a = “11”, b = “1”
输出:“100”
输入:a = “1010”, b = “1011”
输出:“10101”
模拟人工进行二进制加法的过程。
假设输入的两个字符串是 a
和 b
。
为了简化代码,我们进行如下操作:
然后从低位到高位依次计算每一位,过程中需要记录前一位的进位。
如果最高位的进位是1,则需要在最高位的位置补上1。
class Solution {
public:
string addBinary(string a, string b) {
if (a.size() < b.size()) swap(a, b);
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int t = 0;
int k = 0;
string res;
while (k < b.size())
{
t += a[k] - '0' + b[k] - '0';
res += to_string(t & 1);
t /= 2;
k ++ ;
}
while (k < a.size())
{
t += a[k] - '0';
res += to_string(t & 1);
t /= 2;
k ++ ;
}
if (t) res += '1';
reverse(res.begin(), res.end());
return res;
}
};