学渣带你刷Leetcode0067二进制求和

题目描述

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

 

示例 1:

输入: a = "11", b = "1"
输出: "100"
示例 2:

输入: a = "1010", b = "1011"
输出: "10101"
 

提示:

每个字符串仅由字符 '0' 或 '1' 组成。
1 <= a.length, b.length <= 10^4
字符串如果不是 "0" ,就都不含前导零。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

白话题目:
 

算法:

 

详细解释关注 B站  【C语言全代码】学渣带你刷Leetcode 不走丢 https://www.bilibili.com/video/BV1C7411y7gB

C语言完全代码


char * addBinary(char * a, char * b){
    int alen = strlen(a);
    int blen = strlen(b);
    int len = alen > blen ? alen : blen;
    char* p = (char*)malloc(sizeof(char) * (len + 2));
    int carry = 0, i = 0, k = 0;
    while(i < alen && i < blen){
        if(a[alen-1-i] == '1' && b[blen-1-i] == '1'){
            p[k++] = carry + '0';
            carry = 1;
        }
        else if((carry == 1 && a[alen-1-i] == '1') ||
                (carry == 1 && b[blen-1-i] == '1')){
            p[k++] = '0';
            carry = 1;
        }
        else{
            p[k++] = ((a[alen-1-i] - '0') + (b[blen-1-i] - '0') + carry) + '0';
            carry = 0;
        }
        i++;
    }
    while(i < alen){
        if(a[alen-1-i] == '1' && carry == 1){
            p[k++] = '0';
            carry = 1;
        }
        else{
            p[k++] = (a[alen-1-i] - '0' + carry) + '0';
            carry = 0;
        }
        i++;
    }
    while(i < blen){
        if(b[blen-1-i] == '1' && carry == 1){
            p[k++] = '0';
            carry = 1;
        }
        else{
            p[k++] = (b[blen-1-i] - '0' + carry) + '0';
            carry = 0;
        }
        i++;
    }
    if(carry == 1){
        p[k++] = '1';
    }
    for(int j = 0; j < k / 2; j++){
        char t = p[j];
        p[j] = p[k - j - 1];
        p[k - j - 1] = t;
    }

    p[k] = '\0';
    return p;
}



 

你可能感兴趣的:(学渣带你刷Leetcode,c语言,算法,leetcode)