思路:1 先声明一个字符串长度加一,把2个字符串都加到这新声明的字符串中;
2 然后统一进行进位
3 要过滤掉前面为0的位置
class Solution {
public:
string addBinary(string a, string b) {
size_t sizea=a.size();
if(sizea==0){
return b;
}
size_t sizeb=b.size();
if(sizeb==0){
return a;
}
int index=max(sizea,sizeb)+1;
vector<int> res(index,0);
int r=index-1;
for(int i=sizea-1;i>=0;--i){
res[r--]+=(a[i]-'0');
}
int carry=0;
r=index-1;
for(int i=sizeb-1;i>=0;--i){
res[r--]+=(b[i]-'0'); //对齐这块要小心
}
for(int i=index-1;i>=0;--i){
res[i]+=carry;
carry=res[i]/2;
res[i]=res[i]%2; //这块要小心
}
int k=0;
while(k<index&&res[k]==0){
k++;
}
if(k==index){
return "0";
}
string fstr;
for(int i=k;i<index;++i){
fstr+=numtostring(res[i]);
}
return fstr;
}
string numtostring(int n){
stringstream ss;
ss<<n;
string str;
ss>>str;
return str;
}
};