Leetcode Add Binary Problem Solution

In this Leetcode Add Binary Problem Solution Given two binary strings a and b, return their sum as a binary string.

Leetcode Add Binary Problem Solution


Problem solution in Python.

class Solution:
    def addBinary(self, a, b):
        if a == "" and b == "":
            return ""
        result = ""
        addOne = False
        a = list(a)
        b = list(b)
        while a!=[] and b !=[]:
            ba = int(a.pop())
            bb = int(b.pop())
            num = ba+bb
            if addOne:
                num += 1
                addOne = False
            if num >= 2:
                result += str(num-2)
                addOne = True
            else:
                result += str(num)
        while a != []:
            d = int(a.pop())
            if addOne:
                d += 1
                addOne = False
            if d >= 2:
                result += str(d-2)
                addOne = True
            else:
                result += str(d)
        while b != []:
            d = int(b.pop())
            if addOne:
                d += 1
                addOne = False
            if d >= 2:
                result += str(d-2)
                addOne = True
            else:
                result += str(d)
        if addOne:
            result += "1"
        return result[::-1]

Problem solution in Java.

import java.math.BigInteger;
class Solution {
    public String addBinary(String a, String b) {
        return new BigInteger(a, 2).add(new BigInteger(b, 2)).toString(2);
    }
}


Problem solution in C++.

class Solution {
public:
    string addBinary(string a, string b) {
        int m = a.size(), n = b.size();
        int s = m > n ? m : n;
        string ret;
        int add = 0;
        while(m || n || add) {
            int ai = m ? a[--m] - '0' : 0;
            int bi = n ? b[--n] - '0': 0;
            int tmp = ai + bi + add;
            ret = char('0' + tmp % 2) + ret;
            add = tmp/2;
        }
        return ret;
    }
};


Problem solution in C.

char* addBinary(char* a, char* b) {
    char result[10000];
    int a_len = strlen(a);
    int b_len = strlen(b);
    int min_len = a_len;
    int max_len = b_len;
    
    if(a_len > b_len){
        min_len = b_len;
        max_len = a_len;
    }
    int i;
    int carry = 0;
    for(i = 0; i < min_len; i++){
        int a_c = a[a_len-i-1]-'0';
        int b_c = b[b_len-i-1]-'0';
        // printf("%d:%d\n",a_c,b_c);
        int sum = a_c + b_c + carry;
        // printf("sum = %d\n",sum);
        if(sum >= 2){
            result[max_len-1-i] = sum%2+'0';
            // printf("result[%d]= %d\n",max_len-1-i,sum%2);
            carry = 1;
        }else{
            result[max_len-1-i] = sum+'0';
            carry = 0;
        }
    }
    // printf("carry:%d\n",carry);
    if(a_len > b_len){
        while(i < max_len){
            printf("1\n");
            int a_c = a[a_len-i-1]-'0';
            // printf("%d\n",a_c);
            int sum = a_c + carry;
            if(sum >= 2){
                result[max_len-1-i] = sum%2+'0';
                // printf("result[%d]= %d\n",max_len-1-i,sum%2);
                carry = 1;
            }else{
                result[max_len-1-i] = sum+'0';
                carry = 0;
            }
            i++;
        }
        
    }else if(a_len < b_len){
        while(i < max_len){
            int b_c = b[b_len-i-1]-'0';
            int sum = b_c + carry;
            if(sum >= 2){
                result[max_len-1-i] = sum%2+'0';
                carry = 1;
            }else{
                result[max_len-1-i] = sum+'0';
                carry = 0;
            }
            i++;
        }
    }
    
    if(carry == 1){
        for(i = max_len; i > 0 ; i--){
            result[i] = result[i-1];
            // printf("last:result[%d]= %d\n", i , result[i]);
        }
        result[0] = '1';
        result[max_len+1] = '\0';
        // printf("%s\n",result);
    }else{
        result[max_len] = '\0';
    }
    
    char* p = result;
    return p;
}


Post a Comment

0 Comments