给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1
和 0
。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
C
char* addBinary(char* a, char* b)
{
if(strlen(a)<strlen(b))
{
char* c=a;
a=b;
b=c;
}
int m=strlen(a);
int n=strlen(b);
for(int i=0;i<m/2;i++)
{
char x=a[i];
a[i]=a[m-1-i];
a[m-1-i]=x;
}
for(int i=0;i<n/2;i++)
{
char x=b[i];
b[i]=b[n-1-i];
b[n-1-i]=x;
}
char* res=(char*)malloc(sizeof(char)*(m+2));
int temp=0;
int ss;
int k=0;
for(int i=0;i<n;i++)
{
ss=(a[i]-'0')+(b[i]-'0')+temp;
if(ss>=2)
{
res[k]=ss%2+'0';
k++;
temp=1;
}
else
{
res[k]=ss+'0';
k++;
temp=0;
}
}
for(int i=n;i<m;i++)
{
ss=(a[i]-'0')+temp;
if(ss>=2)
{
res[k]=ss%2+'0';
k++;
temp=1;
}
else
{
res[k]=ss+'0';
k++;
temp=0;
}
}
if(temp==1)
{
res[k]='1';
k++;
}
for(int i=0;i<k/2;i++)
{
char x=res[i];
res[i]=res[k-1-i];
res[k-1-i]=x;
}
res[k]='\0';
return res;
}
C++
class Solution {
public:
string addBinary(string a, string b)
{
string res="";
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
if(a.size()<b.size())
{
string c=a;
a=b;
b=c;
}
int m=a.size();
int n=b.size();
int temp=0;
for(int i=0;i<n;i++)
{
int bit=(a[i]-'0')+(b[i]-'0')+temp;
if(bit>=2)
{
res+=(bit%2+'0');
temp=1;
}
else
{
res+=(bit+'0');
temp=0;
}
}
for(int i=n;i<m;i++)
{
int bit=(a[i]-'0')+temp;
if(bit>=2)
{
res+=(bit%2+'0');
temp=1;
}
else
{
res+=(bit+'0');
temp=0;
}
}
if(temp==1)
{
res+='1';
}
reverse(res.begin(),res.end());
return res;
}
};
python
class Solution:
def addBinary(self, a, b):
"""
:type a: str
:type b: str
:rtype: str
"""
res=[]
A=list(a)
B=list(b)
A=A[::-1]
B=B[::-1]
if len(A)<len(B):
C=A
A=B
B=C
m=len(A)
n=len(B)
temp=0
for i in range(0,n):
ss=int(A[i])+int(B[i])+temp
if ss>=2:
res.append(str(ss%2))
temp=1
else:
res.append(str(ss))
temp=0
for i in range(n,m):
ss=int(A[i])+temp
if ss==2:
res.append('0')
temp=1
else:
res.append(str(ss))
temp=0
if temp==1:
res.append('1')
res=res[::-1]
return ''.join(res)