题目:
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
代码1:
class Solution {
public:
string addBinary(string a, string b) {
char carry='0';
string c;
if(a.empty())return b;
if(b.empty())return a;
string::iterator itr_a=a.end()-1;
string::iterator itr_b=b.end()-1;
while(itr_a>=a.begin()&&itr_b>=b.begin()){
if(*itr_a=='0'&&*itr_b=='0'){
if(carry=='0'){
c.insert(c.begin(),'0');
}else if(carry=='1'){
c.insert(c.begin(),'1');
carry='0';
}
itr_a--;itr_b--;
continue;
}
if(*itr_a=='0'&&*itr_b=='1'){
if(carry=='0'){
c.insert(c.begin(),'1');
}else if(carry=='1'){
c.insert(c.begin(),'0');
carry='1';
}
itr_a--;itr_b--;
continue;
}
if(*itr_a=='1'&&*itr_b=='0'){
if(carry=='0'){
c.insert(c.begin(),'1');
}else if(carry=='1'){
c.insert(c.begin(),'0');
carry='1';
}
itr_a--;itr_b--;
continue;
}
if(*itr_a=='1'&&*itr_b=='1'){
if(carry=='0'){
c.insert(c.begin(),'0');
carry='1';
}else if(carry=='1'){
c.insert(c.begin(),'1');
carry='1';
}
itr_a--;itr_b--;
continue;
}
}
while(itr_a>=a.begin()){
if(carry=='0'){
c.insert(c.begin(),a.begin(),itr_a+1);
break;
}
if(*itr_a=='0'&&carry=='1'){
c.insert(c.begin(),'1');
carry='0';
itr_a--;
continue;
}
if(*itr_a=='1'&&carry=='1'){
c.insert(c.begin(),'0');
carry='1';
itr_a--;
continue;
}
}
while(itr_b>=b.begin()){
if(carry=='0'){
c.insert(c.begin(),b.begin(),itr_b+1);
break;
}
if(*itr_b=='0'&&carry=='1'){
c.insert(c.begin(),'1');
carry='0';
itr_b--;
continue;
}
if(*itr_b=='1'&&carry=='1'){
c.insert(c.begin(),'0');
carry='1';
itr_b--;
continue;
}
}
if(carry=='1'){
c.insert(c.begin(),'1');
}
return c;
}
};
解题思路2:首先判断a和b的长度,取其中更长的size作为加法运算的次数。在加法运算时,将每一个char转化为int型数字进行运算并记录进位。优点:程序简单。
代码2:
class Solution {
public:
string addBinary(string a, string b) {
int carry=0;
string c;
if(a.empty())return b;
if(b.empty())return a;
const size_t n=max(a.size(),b.size());
for(int i=0;i<n;i++){
int val_a=i<a.size()?a[a.size()-1-i]-'0':0;
int val_b=i<b.size()?b[b.size()-1-i]-'0':0;
int val_c=(val_a+val_b+carry)%2;
carry=(val_a+val_b+carry)/2;
c.insert(c.begin(),val_c+'0');
}
if(carry==1){
c.insert(c.begin(),'1');
}
return c;
}
};