package problems.easy;
/**
* Created by sherxon on 2017-01-29.
*/
/**
* Problem: Given Two Binary Strings a, b return Binary representation of sum of a and b;
*/
public class AddBinary {
public String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int i = a.length() - 1;
int j = b.length() - 1;
boolean carry = false; // this can only be 1 or 0
while (i >= 0 || j >= 0) {
boolean f = false;
boolean s = false;
if (i >= 0 && j >= 0) {
f = a.charAt(i--) == '1';
s = b.charAt(j--) == '1';
} else if (i >= 0)
f = a.charAt(i--) == '1';
else
s = b.charAt(j--) == '1';
if (f && s) {
sb.insert(0, carry ? 1 : 0);
carry = true;
} else if (f || s) {
sb.insert(0, carry ? 0 : 1);
} else {
sb.insert(0, carry ? 1 : 0);
carry = false;
}
}
if (carry) sb.insert(0, 1);
return sb.toString();
}
public String addBinary2(String a, String b) {
StringBuilder sb = new StringBuilder();
int i = a.length() - 1, j = b.length() - 1, carry = 0;
while (i >= 0 || j >= 0) {
int sum = carry;
if (j >= 0) sum += b.charAt(j--) - '0';
if (i >= 0) sum += a.charAt(i--) - '0';
sb.append(sum % 2);
carry = sum / 2;
}
if (carry != 0) sb.append(carry);
return sb.reverse().toString();
}
}