package com.interview.books.leetcodeoj; /** * Created_By: stefanie * Date: 14-12-23 * Time: 上午11:08 */ public class LOJ67_AddBinary { //1. loop on the max length, do a.length() - i. i from 1 to max_length //2. use int to do bit operation, result = cha ^ chb ^ carry, and carry = (cha & chb) | ((cha ^ chb) & carry); //3. after loop add the last carry to result if carry > 0 public String addBinary(String a, String b) { if(a == null || a.length() == 0) return b; if(b == null || b.length() == 0) return a; StringBuffer buffer = new StringBuffer(); int length = Math.max(a.length(), b.length()); int carry = 0; for(int i = 1; i <= length; i++){ int cha = a.length() - i < 0? 0: a.charAt(a.length() - i) - '0'; int chb = b.length() - i < 0? 0: b.charAt(b.length() - i) - '0'; carry = add(cha, chb, carry, buffer); } if(carry > 0) buffer.insert(0, carry); return buffer.toString(); } public int add(int cha, int chb, int carry, StringBuffer buffer){ buffer.insert(0, (cha ^ chb ^ carry)); return (cha & chb) | ((cha ^ chb) & carry); } }