leetcode-67.二进制求和
数学问题
题目详情
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1 和 0。
示例1:
输入: a = "11", b = "1"
输出: "100"
示例2:
输入: a = "1010", b = "1011"
输出: "10101"
思路:
这道题是leetcode-415.字符串相加的变种题,只是十进制变成了二进制,思路完全一样
我的415的详细解析题解:
leetcode-415.字符串相加
我的代码:
class Solution
{
public:
string addBinary(string a, string b)
{
string res = ""; // 存结果
//反转一下
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
int len_a = a.length(), len_b = b.length();
if (len_a <= len_b) //让较长数字在前
{
swap(a, b);
swap(len_a, len_b);
}
int addbit = 0; //是否进位
for (int i = 0; i < len_b; ++i) //处理等长部分
{
int cur_sum = (a[i] - '0') + (b[i] - '0') + addbit;
res += to_string(cur_sum % 2);
addbit = cur_sum < 2? 0 : 1;
}
for (int i = len_b; i < len_a; ++i) //处理较长部分
{
int cur_sum = (a[i] - '0') + addbit;
res += to_string(cur_sum % 2);
addbit = cur_sum < 2? 0 : 1;
}
if (addbit) //处理最高位
{
res += "1";
}
reverse(res.begin(), res.end()); //反转回来
return res;
}
};