67. 二进制求和
题目
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:输入: a = "1010", b = "1011"
输出: "10101"
class Solution {
public:
string addBinary(string a, string b) {
int lenA = a.length();
int lenB = b.length();
if (0 == lenA)
return b;
if (0 == lenB)
return a;
if (lenA < lenB) {
swap(lenA, lenB);
swap(a, b);
}
//printf("-------%s\n", a.c_str());
//a是长串
int carry = 0;
for (int i = lenA-1, j = lenB-1; i >=0; --i) {
if (j >=0) { //同时处理b串
if (a[i] == '1' && b[j] == '1') {
a[i] = '0' + carry;
carry = 1;
} else if (carry && (a[i] == '1' || b[j] == '1')){
a[i] = '0';
} else {
a[i] = '0' + (a[i] - '0') + (b[j] - '0') + carry;
carry = 0;
}
--j;
} else if (carry) { //处理进位
if (a[i] == '1') {
a[i] = '0';
} else {
++a[i];
carry = 0;
break;
}
}
}
if (carry)
a = '1' + a;
return a;
}
};