67. 二进制求和
给你两个二进制字符串,返回它们的和(用二进制表示)。
输入为 非空 字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
提示:
- 每个字符串仅由字符
'0'
或'1'
组成。 1 <= a.length, b.length <= 10^4
- 字符串如果不是
"0"
,就都不含前导零。
今天题目比较简单,没啥说的。。看代码把:
class Solution {
public:
string addBinary(string a, string b) {
int alen = a.size()-1;
int blen = b.size()-1;
int flag = 0;
string ans = "";
while( alen>=0 || blen>=0 || flag==1 )
{
int temp = flag;
if(alen>=0){
temp += (a[alen]-'0');alen--;
}
if(blen>=0){
temp += (b[blen]-'0');blen--;
}
flag = temp/2;
ans.push_back(temp%2+'0');
}
reverse(ans.begin(),ans.end());
return ans;
}
};
从后往前倒着加起来,进位,再加起来,再进位。搞完之后把得到的串逆转一下完事。也可以每次得结果直接插在串前面,这样最后就不用逆转串。但是我估计插前面更费时间。