67. Add Binary

来源:互联网 发布:淘宝开店认证电脑认证 编辑:程序博客网 时间:2024/05/02 19:18

Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"

Return "100".


二进制相加,使用数组存下每一位带carry的相加,最长长度不会超过a.length+b.length

取较短的位数相加,较短到较长的位数,长的串和carry相加,较长到a.length+b.length这段区间,和carry相加直到进位为0

 public static String addBinary(String a, String b){int alen=a.length();int blen=b.length();int minlen=alen<blen?alen:blen;int maxlen=alen==minlen?blen:alen;int len=alen+blen;int[] num=new int[len];int carry=0;for(int i=0;i<minlen;i++){num[len-1-i]=a.charAt(alen-1-i)-'0'+b.charAt(blen-1-i)-'0'+carry;carry=num[len-1-i]/2;num[len-1-i]%=2;}for(int i=minlen;i<maxlen;i++){if(alen==maxlen)num[len-1-i]=a.charAt(alen-1-i)-'0'+carry;else {num[len-1-i]=b.charAt(blen-1-i)-'0'+carry;}carry=num[len-1-i]/2;num[len-1-i]%=2;}for(int i=maxlen;i<len;i++){num[len-1-i]+=carry;carry=num[len-1-i]/2;if(carry==0)break;num[len-1-i]%=2;}int start=-1;for(int i=0;i<len;i++)if(num[i]!=0){start=i;break;}if(start==-1)return "0";StringBuilder sb=new StringBuilder();for(int i=start;i<len;i++)sb.append(num[i]);return sb.toString();}


0 0