给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
class Solution {
public:
string addBinary(string a, string b) {
int len_a = a.size();
int len_b = b.size();
int len_min = min(len_a, len_b);
int len_max = max(len_a, len_b);
string s(len_max-len_min,'0');
if(len_a>len_b) b=s+b;
if(len_a<len_b) a=s+a;
char ini = '0';
int c;
vector<int> str;
if(len_a==0) return b;
if(len_b==0) return a;
for(int i = len_max-1; i>=0 ; i--)
{
if((a[i]=='1'&&b[i]=='1') || (a[i]=='1'&&ini=='1') || (b[i]=='1'&&ini=='1'))
{
a[i] = a[i]^b[i]^ini;
//str.push_back(c);
ini='1';
}
else
{
a[i] = a[i]^b[i]^ini;
//str.push_back(c);
ini='0';
}
}
if(ini == '1')
a = '1'+a;
return a;
}
};
首先将短的字符串前面补‘0’,直到两个字符串长度一致,然后用ini记录进位的情况。用异或计算:a[i] ^ b[i] ^ ini, for循环用于判断进位情况。
字符串中的数字为char类型,char类型转化为int类型数字相加减:
1+1 =‘1’-‘0’ + ‘1’ - ‘0’;
做题的时候纠结的一点是如何生成一个保存结果的字符串。后来的额解决方法是在字符串a中直接进行修改。