Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100".
这道也是水题,但是注意有前导0,还有全0的时候输出为0。.还有最后结果的处理。
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
string addBinary(string a, string b) {
if (a.empty())
{
return b;
}
if (b.empty())
{
return a;
}
int i = 0;
int j = 0;
for (; i < a.size(); ++i)
{
if (a[i] != ‘0‘)
{
break;
}
}
if (i == a.size())
{
a.clear();
}
else
{
a = a.substr(i);
}
for (; j < b.size(); ++j)
{
if (b[j] != ‘0‘)
{
break;
}
}
if (j == b.size())
{
b.clear();
}
else
{
b = b.substr(j);
}
int size = a.size() > b.size() ? a.size()+1 : b.size()+1;
string res(size, ‘0‘);
int k = res.size() - 1;
if (k==0)
{
return "0";
}
i = a.size() - 1;
j = b.size() - 1;
int flag = 0;
while(i >= 0 && j >= 0)
{
int num1 = a[i--] - ‘0‘;
int num2 = b[j--] - ‘0‘;
int tmp = num1+num2 +flag;
res[k--] = tmp % 2+ ‘0‘;
flag = tmp / 2;
}
while (i >= 0)
{
int num1 = a[i--] - ‘0‘;
int tmp = num1+flag;
res[k--] = tmp % 2+ ‘0‘;
flag = tmp / 2;
}
while (j >= 0)
{
int num2 = b[j--] - ‘0‘;
int tmp = num2 +flag;
res[k--] = tmp % 2 + ‘0‘;
flag = tmp / 2;
}
if (0 != flag && k >= 0)
{
res[k--] = flag + ‘0‘;
}
return res.substr(++k);
}
};
int main()
{
Solution s;
printf("%s\n", s.addBinary("00", "000").c_str());
};leetcode Add Binary,布布扣,bubuko.com
原文:http://blog.csdn.net/boyxiaolong/article/details/22865381