67. Add Binary
这题只能迭代字符串。一个接一个地加。
如果想用先把字符串转换为数字。相加后转换为字符串,是不可行的。因为测试数据会给出很长的字符串,是无法转换成数字的。
Code:
class Solution {
public:
string addBinary(string a, string b) {
int carry=0,N1=a.size(),N2=b.size();
if(N1<N2)
a =string(N2-N1, '0')+a;
else if(N1> N2)
b = string(N1-N2,'0')+b;
string result;
for(int i=a.size()-1; i>=0; i--){
switch(!!(a[i]-'0')+2*!!(b[i]-'0')+4*!!carry){
case 0: // a[i]=0 b[i]=0 carry=0
carry=0;
result+='0';
break;
case 1: // a[i]=1 b[i]=0 carry=0
case 2: // a[i]=0 b[i]=1 carry=0
carry=0;
result+='1';
break;
case 3: // a[i]=1 b[i]=1 carry=0
carry=1;
result+='0';
break;
case 4: // a[i]=0 b[i]=0 carry=1
carry=0;
result+='1';
break;
case 5: // a[i] =1 b[i]=0 carry=1
case 6: //a[i] =0 b[i]=1 carry=1
carry=1;
result+='0';
break;
case 7: //a[i]=1 b[i]=1 carry=1
carry=1;
result+='1';
break;
}
}
if(carry==1)
result+='1';
reverse(result.begin(),result.end());
return result;
}
};