1.题目描述
给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
2.代码实现
class Solution {
public:
string addBinary(string a, string b) {
if(a.length() == 0 && b.length() == 0)
return "";
if(a.length() == 0)
return b;
if(b.length() == 0)
return a;
string res = "";
int idx_a = a.length() - 1;
int idx_b = b.length() - 1;
char flag = '0';
while(idx_a >= 0 || idx_b >= 0)
{
char val;
if(idx_a >= 0 && idx_b >= 0)
{
if(a[idx_a] == '0' && b[idx_b] == '0')
{
val = flag;
flag = '0';
}
else if((a[idx_a] == '0' && b[idx_b] == '1') || (a[idx_a] == '1' && b[idx_b] == '0'))
{
if(flag == '0')
val = '1';
else
val = '0';
}
else if(a[idx_a] == '1' && b[idx_b] == '1')
{
val = flag;
flag = '1';
}
}
else if(idx_a >= 0 && idx_b < 0)
{
if(a[idx_a] == '0')
{
if(flag == '0')
val = '0';
else
val = '1';
flag = '0';
}
else if(a[idx_a] == '1')
{
if(flag == '0')
val = '1';
else
val = '0';
}
}
else if(idx_b >= 0 && idx_a < 0)
{
if(b[idx_b] == '0')
{
if(flag == '0')
val = '0';
else
val = '1';
flag = '0';
}
else if(b[idx_b] == '1')
{
if(flag == '0')
val = '1';
else
val = '0';
}
}
idx_a--;
idx_b--;
res.insert(res.begin(), val);
}
if(flag == '1')
res.insert(res.begin(), flag);
return res;
}
};