算法题目:Given two binary strings, return their sum (also a binary string).
For example,
a = “11”
b = “1”
Return “100”
大致意思:二进制字符串的加法
解题思路:可以用循环与递归来求解
循环版本:
string addBinary(string a, string b) {
int c=0;
int len1=a.size();
int len2=b.size();
string ret(max(len1,len2),'0');
int i=a.size()-1;
int j=b.size()-1;
int k=ret.size()-1;
int m=0;
while(k>=0)
{
m+=c;
if(i>=0)
{
m+=(a[i]-'0');
}
if(j>=0)
{
m+=(b[j]-'0');
}
c=m/2;
ret[k]+=m%2;
m=0;
i--;
j--;
k--;
}
return c>0?string(1,c+'0')+ret:ret;
}
递归版本:
string addBinaryCore(string a,string b,int c)
{
if(a.size()==0&&b.size()==0&&c==0)return "";
string substra("");
string substrb("");
int ca=0;
int cb=0;
if(a.size()!=0)
{
substra=a.substr(0,a.size()-1);
ca=a[a.size()-1]-'0';
}
if(b.size()!=0)
{
substrb=b.substr(0,b.size()-1);
cb=b[b.size()-1]-'0';
}
int m=(ca+cb+c)%2;
c=(ca+cb+c)/2;
return addBinaryCore(substra,substrb,c)+string(1,m+'0');
}
string addBinary(string a, string b) {
return addBinaryCore(a,b,0);
}