package com.interview.algorithms.general; /** * Created_By: stefanie * Date: 14-11-6 * Time: 上午11:14 */ public class C1_74_BinaryStringAdd { public static String addBinary(String a, String b) { StringBuilder builder = new StringBuilder(); int carry = 0; int la = a.length() - 1; int lb = b.length() - 1; int common = Math.min(a.length(), b.length()); for(int i = 0; i < common; i++){ carry = sum(a.charAt(la - i), b.charAt(lb - i), carry, builder); } String remain = a.length() == common? b : a; int left = remain.length() - common; for(int i = left - 1; i >= 0; i--){ carry = sum(remain.charAt(i), '0', carry, builder); } if(carry == 1) builder.insert(0, 1); cleanZero(builder); return builder.toString(); } private static int sum(char cha, char chb, int carry, StringBuilder builder){ if(cha == '1' && chb == '1') { builder.insert(0, carry); return 1; } else if(cha == '0' && chb == '0'){ builder.insert(0, carry); return 0; } else { if(carry == 1) builder.insert(0, 0); else builder.insert(0, 1); return carry; } } private static void cleanZero(StringBuilder builder){ for(int i = 0; i < builder.length() - 1 && builder.charAt(i) == '0';){ builder.deleteCharAt(0); } } }