给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
class Solution {
public:
string addBinary(string a, string b) {
// 使两个字符串等长
if (a.size() > b.size()) {
//往前插0,不会影响数字
b.insert(0, a.size() - b.size(), '0');
}else {
a.insert(0, b.size() - a.size(), '0');
}
//输出字符串
string ans;
//反转字符串
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
//n表示两个字符串的长度,carry表示进位
int n = a.size(), carry = 0;
//对两个字符串逐位相加
for (int i = 0; i < n; i++) {
//和
int total = (a[i] == '1') + (b[i] == '1') + carry;
switch (total) {
//和为0,往输出字符串填充0,进位为0
case 0:
ans.push_back('0'); carry = 0; break;
//和为1,往输出字符串填充1,进位为0
case 1:
ans.push_back('1'); carry = 0; break;
//和为2,往输出字符串填充0,进位为1
case 2:
ans.push_back('0'); carry = 1; break;
//和为3,往输出字符串填充1,进位为1
case 3:
ans.push_back('1'); carry = 1; break;
}
}
//字符串累加后,进位如果为1,在最后插入1
if (carry) {
ans.push_back('1');
}
//反转字符串
reverse(ans.begin(), ans.end());
return ans;
}
};
596

被折叠的 条评论
为什么被折叠?



