In this Leetcode Add Binary Problem Solution Given two binary strings a and b, return their sum as a binary string.
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;
}
0 Comments