Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
Solutions:
刚开始走了弯路,将2进制字符串转化为整型int,相加后结果转化为2进制string。麻烦且字符串太长的话会出错。
后来用一个进位直接判断字符‘0’和‘1’相加结果。还要注意最后的顺序是反的,要反转一下。最后进位若为‘1’的话也要加上。
class Solution {
public:
string addBinary(string a, string b) {
int ax=a.size()-1;
int bx=b.size()-1;
char jinwei='0';
string str;
for(; ax>=0 && bx>=0; --ax, --bx) {
if(a[ax]=='0' && b[bx]=='0') {
str+=jinwei;
jinwei='0';
}
else if((a[ax]=='0' && b[bx]=='1') || (a[ax]=='1' && b[bx]=='0')){
if('0'==jinwei) {
str+='1';
jinwei='0';
} else {
str+='0';
jinwei='1';
}
}
else if('1'==a[ax]&&'1'==b[bx]){
if('0'==jinwei) {
str+='0';
jinwei='1';
} else {
str+='1';
jinwei='1';
}
}
}
while(ax >= 0) {
if('0'==a[ax]){
str+=jinwei;
jinwei='0';
}else {
if('0'==jinwei) {
str+='1';
jinwei='0';
}else{
str+='0';
jinwei='1';
}
}
--ax;
}
while(bx >= 0) {
if('0'==b[bx]){
str+=jinwei;
jinwei='0';
}else {
if('0'==jinwei) {
str+='1';
jinwei='0';
}else{
str+='0';
jinwei='1';
}
}
--bx;
}
if('1'==jinwei){
str+='1';
}
string ret;
for(ax=str.size()-1; ax>=0; --ax) {
ret+=str[ax];
}
return ret;
}
};