From : https://leetcode.com/problems/add-binary/
Given two binary strings, return their sum (also a binary string).
For example,
a = "11"
b = "1"
Return "100"
.
class Solution {
public:
string addBinary(string a, string b) {
if(a=="0") return b;
if(b=="0") return a;
string ans;
int ia = a.size()-1, ib = b.size()-1, carry = 0, va, vb;
while(ia >= 0 || ib >= 0) {
if(ia < 0) {va = 0; vb = b[ib]-'0';}
else if(ib < 0) {vb = 0; va = a[ia]-'0';}
else {va = a[ia]-'0';vb = b[ib]-'0';}
int sum = va + vb + carry;
switch(sum) {
case 0: {ans = '0' + ans; carry = 0; break;}
case 1: {ans = '1' + ans; carry = 0; break;}
case 2: {ans = '0' + ans; carry = 1; break;}
case 3: {ans = '1' + ans; carry = 1; break;}
}
ia--; ib--;
}
if(carry) ans = '1' + ans;
return ans;
}
};
public class Solution {
public String addBinary(String a, String b) {
if(a == null || "".equals(a)) {
return b;
} else if(b == null || "".equals(b)) {
return a;
}
int carry = 0;
int ia = a.length()-1, ib = b.length()-1;
StringBuilder sb = new StringBuilder();
while(ia>=0 && ib>=0) {
int n = a.charAt(ia--)-'0'+b.charAt(ib--)-'0'+carry;
sb.append(n&1);
carry = n>>1;
}
if(ia >= 0) {
carry = addRest(a, ia, sb, carry);
}
if(ib >= 0) {
carry = addRest(b, ib, sb, carry);
}
if(carry > 0) {
sb.append('1');
}
return sb.reverse().toString();
}
private int addRest(String s, int i, StringBuilder sb, int carry) {
while(i >= 0) {
int n = s.charAt(i--)-'0'+carry;
sb.append(n&1);
carry = n>>1;
}
return carry;
}
}