Given two binary strings, return their sum (also a binary string).
The input strings are both non-empty and contains only characters 1
or 0
.
Example 1:
Input: a = "11", b = "1"
Output: "100"
Example 2:
Input: a = "1010", b = "1011"
Output: "10101"
又是一道简单题磨叽了很久???弱啊。
class Solution {
public:
string addBinary(string a, string b) {
int lena=a.size(),lenb=b.size();
int maxx=max(lena,lenb);
char d[maxx+1];
int k=0;
int lend=maxx;
int i=lena-1,j=lenb-1;
while(i>=0&&j>=0)
{
if(a[i]=='1'&&b[j]=='1'&&k==1)
{
d[lend]='1';
k=1;
}
else if(a[i]=='0'&&b[j]=='0'&&k==1)
{
d[lend]='1';
k=0;
}
else if(k==1)
{
d[lend]='0';
k=1;
}
else if(a[i]==b[j])
{
d[lend]='0';
if(a[i]=='0')
k=0;
else
k=1;
}
else
{
k=0;
d[lend]='1';
}
--i;
--j;
--lend;
}
if(lena>lenb)
{
for(int q=lena-lenb-1;q>=0;--q)
{
if(k==0)
{
d[lend]=a[q];
}
if(k==1)
{
if(a[q]=='0')
{
d[lend]='1';
k=0;
}
else
{
d[lend]='0';
}
}
--lend;
}
}
else if(lena<lenb)
{
for(int q=lenb-lena-1;q>=0;--q)
{
if(k==0)
{
d[lend]=b[q];
}
if(k==1)
{
if(b[q]=='0')
{
d[lend]='1';
k=0;
}
else
{
d[lend]='0';
}
}
--lend;
}
}
if(k==1)
d[0]='1';
else
d[0]='0';
string c(d);
c.erase(c.begin()+maxx+1,c.end());
if(c[0]=='0')
c.erase(c.begin());
return c;
}
};
再看看别人家的代码,差距还是很大。
class Solution
{
public:
string addBinary(string a, string b)
{
string s = "";
int c = 0, i = a.size() - 1, j = b.size() - 1;
while(i >= 0 || j >= 0 || c == 1)
{
c += i >= 0 ? a[i --] - '0' : 0;
c += j >= 0 ? b[j --] - '0' : 0;
s = char(c % 2 + '0') + s;
c /= 2;
}
return s;
}
};