给定两个二进制字符串,返回它们的和(二进制字符串)。
carry(a+b+carry) % 2,新进位 = (a+b+carry) / 2class Solution {
public:
string addBinary(string a, string b) {
if (a.empty()) return b;
if (b.empty()) return a;
// 对齐
if (a.size() < b.size()) swap(a, b);
b.insert(b.begin(), a.size() - b.size(), '0');
string res;
int carry = 0;
for (int i = a.size()-1; i >= 0; --i) {
int sum = (a[i]-'0') + (b[i]-'0') + carry;
res.push_back('0' + (sum & 1));
carry = sum >> 1;
}
if (carry) res.push_back('1');
reverse(res.begin(), res.end());
return res;
}
};
sum & 1 取最低位,sum >> 1 取进位reverse相同逻辑适用于任意进制,只需修改基数。