67.二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)
输入为非空字符串且只包含数字 1 和 0.
示例1:
输入:a = “11” , b = “1”
输出:“100”
示例2:
输入:a = “1010” , b = “1011”
输出:“10101”
来源:力扣(LeetCode)
链接:link
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
对输入字符串进行反转,遍历所有项,进行二进制加法以及进位运算,最后的进位要特别注意
C++源码:
class Solution {
public: string addBinary(string a, string b) {
reserve(a);
reserve(b);
int i = 0;
char label = '0';
int t = 0;
string ans;
for(int i = 0;i < a.size() || i < b.size();i++)
{
if(i < a.size()) t = a[i] - '0' + t;
if(i < b.size()) t = b[i] - '0' + t;
if(t >= 2)
{
ans += to_string(t % 2);
t = t / 2;
}
else
{
ans += to_string(t);
t = 0;
}
}
if(t)
ans += to_string(1);
reserve(ans);
return ans;
}
void reserve(string &str)//反转函数
{
int left = 0;
int right = str.length() - 1;
while(left < right)
{
swap(str[left],str[right]);
left++;
right--;
}
}
};