给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: "10101"
思路:
1.用aoti转成整型进行进位再转回string,没有考虑到超出INT_MAX的情况所以不可行
class Solution {
public:
string addBinary(string a, string b) {
if(a=="0" && b=="0"){
return "0";
}
int a1=atoi(a.c_str());
int b1=atoi(b.c_str());
int sum=a1+b1;
string str="";
while(sum!=0){
str+=char(sum%10%2+'0');
int temp=sum%10/2;
sum=sum/10+temp;
}
reverse(str.begin(),str.end());
return str;
}
};
2.因为int型会有数据溢出的情况所以直接对字符串进行处理
class Solution {
public:
string addBinary(string a, string b) {
reverse(a.begin(),a.end());//因为要进行补0所以先反转字符串
reverse(b.begin(),b.end());
string str="";//设置一个空串
if(a.length()>=b.length()){//a比b长对b进行补0
int length=a.length()-b.length();
for(int i=0;i<length;i++){
b+="0";
}
}
else if(a.length()<b.length()){
int length=b.length()-a.length();
for(int i=0;i<length;i++){
a+="0";
}
}
for(int i=0;i<a.length();i++){//此时两串长度相等
int c=int(a[i]-'0')+int(b[i]-'0');//从第一位开始转成int型
if(c>=2 && i!=a.length()-1){//c大于2需要进行进位
str+=char(c%2+'0');
a[i+1]=a[i+1]+c/2;//如2进位后后面的一位需要进1,所以将这个1直接加在a的后一位上
}
else if(c<2){
str+=char(c+'0');
}
else if(c>=2 && i==a.length()-1){//已经到a串的最后一位并大于0
str+=char(c%2+'0');
str+=char(c/2+'0');
}
}
reverse(str.begin(),str.end());
return str;
}
};