Have you met this question in a real interview?
Yes
No
直接按位相加,进位判断,就是判断过程比较繁琐麻烦。 (代码长到cry...唯一好处,字符串无限长都可以啊,不用怕转换成整数想加会越界)
class Solution {
public:
string addBinary(string a, string b) {
int i=a.length()-1, j=b.length()-1;
char pre='0';
string ans ="";
while(i>=0&&j>=0){
if(a[i]=='1'&&b[j]=='1'){
if(pre=='1')
ans='1'+ans;
else{
pre='1';
ans='0'+ans;
}
}else if(a[i]=='0'&&b[j]=='0'){
ans=pre+ans;
pre='0';
}else{
if(pre=='1'){
ans='0'+ans;
}else
ans='1'+ans;
}
i--,j--;
}
while(i>=0||j>=0){
if((i>=0&&a[i]=='0')||(j>=0&&b[j]=='0')){
if(pre=='1'){
ans='1'+ans;
pre='0';
}
else
ans='0'+ans;
}
else{
if(pre=='1'){
ans='0'+ans;
pre='1';
}
else
ans='1'+ans;
}
i--,j--;
}
if(pre=='1')
ans='1'+ans;
return ans;
}
};
简化一点:
class Solution {
string ans="";
void add(char a, char b, char &p){
if(a=='1'&&b=='1'){
if(p=='1')
ans='1'+ans;
else{
p='1';
ans='0'+ans;
}
}else if(a=='0'&&b=='0'){
ans=p+ans;
p='0';
}else{
if(p=='1'){
ans='0'+ans;
}else
ans='1'+ans;
}
}
public:
string addBinary(string a, string b) {
int i=a.length()-1, j=b.length()-1;
char pre='0';
while(i>=0&&j>=0){
add(a[i],b[j],pre);
i--,j--;
}
while(i>=0){
add(a[i],'0',pre);
i--;
}
while(j>=0){
add('0',b[j],pre);
j--;
}
if(pre=='1')
ans='1'+ans;
return ans;
}
};