leet

char * addBinary(char * a, char * b){

    char *res =(char *)malloc(sizeof(char) * 10000);

    memset(res, '0', sizeof(char) * 10000);

    int aLen = strlen(a);

    int bLen = strlen(b);

    //int record = abs(aLen - bLen);

    int strMaxLen = aLen > bLen ? aLen : bLen;

    char * tAB = (char *)malloc(sizeof(char) * (strMaxLen + 1));

    memset(tAB, '0', sizeof(char) * (strMaxLen + 1));

    tAB[strMaxLen] = '\0';

    if(aLen > bLen) {

        int bL = bLen - 1;

        for(int i = aLen - 1; i >= 0 && bL >= 0; i--) {

            tAB[i] = b[bL];

            bL--;

        }

    }

    else {

        int aL = aLen - 1;

        for(int i = bLen - 1; i >= 0 && aL >= 0; i--) {

            tAB[i] = a[aL];

            aL--;

        }

    }

    int flag = 0;

    for(int i = aLen - 1; i >= 0; i--) {

        int count = 0;

        if(aLen > bLen) {

            count = (a[i] -'0') + (tAB[i] -'0') + flag;

        }

        else{

            count = (b[i] -'0') + (tAB[i] -'0') + flag;

        }

        if(count == 2) {

            flag = 1;

            res[i + 1] = '0';

        }

        else if(count == 3) {

            flag = 1;

            res[i + 1] = 1 - '0';

        }

        else {

            flag = 0;

            res[i + 1] = count -'0';

        }

    }

    if(flag == 1) {

        res[0] = 1 -'0';

        res[aLen + 1] = '\0';

    }

    else {

        int i = 1;

        while(i <= aLen - 1) {

            res[i - 1] = res[i];

            res[aLen] = '\0';

            i++;

        }

    }

    return res;

}

你可能感兴趣的:(LeetCode)