题目:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
思路:
和Leetcode 66的思路几乎一模一样,还是按位相加,记录一个进位标志。如果在最后还有进位,则额外处理。由于vector中insert的效率要远远低于push_back,所以我们先反向存储字符串,在相加完成之后再进行一次翻转并返回结果。
代码:
class Solution {
public:
string addBinary(string a, string b) {
int len1 = a.size(), len2 = b.size();
int carry = 0;
string ret;
while(len1 > 0 || len2 > 0) // make the logic much simpler
{
int value = 0;
if(len1 > 0) value += a[--len1] - '0';
if(len2 > 0) value += b[--len2] - '0';
value += carry;
ret.push_back('0' + value % 2);
carry = value / 2;
}
if(carry) {
ret.push_back('1');
}
reverse(ret.begin(), ret.end());
return ret;
}
};