← Strings

Add Binary

Easy
Python
def add_binary(a,b):
    res=''; carry=0; i,j=len(a)-1,len(b)-1
    while i>=0 or j>=0 or carry:
        x=int(a[i]) if i>=0 else 0
        y=int(b[j]) if j>=0 else 0
        carry,rem=divmod(x+y+carry,2)
        res=str(rem)+res; i-=1; j-=1
    return res
Java
public String addBinary(String a,String b){
    StringBuilder res=new StringBuilder();
    int i=a.length()-1,j=b.length()-1,carry=0;
    while(i>=0||j>=0||carry>0){
        int x=i>=0?a.charAt(i--)-'0':0;
        int y=j>=0?b.charAt(j--)-'0':0;
        int sum=x+y+carry;
        res.append(sum%2); carry=sum/2;
    } return res.reverse().toString();
}

Key Insight

divmod() gets both. Java c-'0' converts char.

Python → Java Differences

  • divmod() vs % and /
  • int(char) vs char-'0'
  • Prepend vs append+reverse
Python
def add_binary(a,b):
    res=''; carry=0; i,j=len(a)-1,len(b)-1
    while i>=0 or j>=0 or carry:
        x=int(a[i]) if i>=0 else 0
        y=int(b[j]) if j>=0 else 0
        carry,rem=divmod(x+y+carry,2)
        res=str(rem)+res; i-=1; j-=1
    return res
Java
public String addBinary(String a,String b){
    StringBuilder res=new StringBuilder();
    int i=a.length()-1,j=b.length()-1,carry=0;
    while(i>=0||j>=0||carry>0){
        int x=i>=0?a.charAt(i--)-'0':0;
        int y=j>=0?b.charAt(j--)-'0':0;
        int sum=x+y+carry;
        res.append(sum%2); carry=sum/2;
    } return res.reverse().toString();
}

Algorithm Steps

1. Process right to left
2. Add with carry