leetcode 67. Add Binary

来源:互联网 发布:linux snmp 编辑:程序博客网 时间:2024/06/08 11:21

原题:

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".

两个二进制字符串,按照二进制数的方式相加,返回一个二进制数组

代码如下:

char* addBinary(char* a, char* b) {    if(a==NULL)    return b;    if(b==NULL)    return a;    if(strlen(a) < strlen(b))    {        char *t;        t = a;        a = b;        b = t;    }    int t=strlen(a)-strlen(b);    int m=strlen(b);    char *result;    result=(char *)malloc(sizeof(char)*(strlen(a)+2));    *(result+strlen(a)+1)='\0';    int flag=0;    int k;    int sum;    for(k=strlen(a); k>t; k--)    {        sum=flag+(int)(*(a+k-1)-'0')+(int)(*(b+k-t-1)-'0');        if(sum>0)        {            if(sum==1)            {                flag=0;                *(result+k)='1';            }            else if(sum==2)            {                flag=1;                *(result+k)='0';            }            else            {                flag=1;                *(result+k)='1';            }        }        else        {            *(result+k)='0';            flag=0;        }    }    for(; k>0 ; k--)    {            if((flag==1&&*(a+k-1)=='1')||((flag==0&&*(a+k-1)=='0')))            {                *(result+k)='0';                continue;            }            *(result+k)='1';            flag=0;    }    if(flag==0)    {        result=result+1;    }    else    {        *result='1';    }    return result;}

思路就是分两段,一个是重叠的,一个不重叠的。做三个数的加法就好。

效率感人/捂脸笑


感觉是服务器抽风了。。。