一、题目
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1" 输出: "100"
示例 2:
输入: a = "1010", b = "1011" 输出: "10101"
二、题解思路
- 题解思路:先根据两个字符串a和b的长度,将短的字符串在其前面插入0使得长度和长的字符串长度一致;接着从后往前遍历字符串,根据相同位之和加上标志变量的值判断存入结果字符串的情况
三、代码实现
- C++代码实现:
class Solution {
public:
string addBinary(string a, string b)
{
int size_1 = a.size();
int size_2 = b.size();
int max_size = size_1;
string result = ""; //保存最后的结果
if(size_1 > size_2) //判断长短
{
string temp = "";
for(int i = 0;i<size_1-size_2;i++)
temp += '0';
b = temp + b;
}
if(size_1 < size_2)
{
max_size = size_2;
string temp = "";
for(int i = 0;i<size_2-size_1;i++)
temp += '0';
a = temp + a;
}
int flag = 0;
for(int i = max_size - 1;i >= 0;i--) //遍历求和
{
int nums = a[i] - '0' + b[i] - '0'; //此处相减得到的是int值(0或q)
if(nums + flag == 2)
{
flag = 1;
result += '0';
}
else if(nums + flag == 3)
{
flag = 1;
result += '1';
}
else if(nums + flag == 1)
{
flag = 0;
result += '1';
}
else
result += '0';
}
if(flag == 1) //要判断最后一次的flag是进位还是不进位
result += '1';
reverse(result.begin(),result.end()); //反转字符串
return result;
}
};