给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
 
class Solution {
    public String addBinary(String a, String b) {
        if(a==null||b==null){
            return "";
        }
        int a1[]=stringFormatInteger(a);
        int b1[]=stringFormatInteger(b);//将字符串转换成数组
        a1=reversal(a1);
        b1=reversal(b1);
        int c[]=addArrayAB(a1,b1);
            c=reversal(c);
        String s=integerFormatString(c);
        return s;
    }
     public static int[] addArrayAB(int[] a,int[] b) {
        int lenA=a.length,lenB=b.length;
        int shortLen,longLen;
        int i,j;
        int[] a1=a;
        int[] b1=b;
        if(lenA>lenB) {
            shortLen=lenB;
            longLen=lenA;
            int c[]=new int[longLen+1];
            for(i=0;i<longLen;i++) {
                c[i]=a1[i];
            }
            c[i]=0;
            for(i=0;i<shortLen;i++) {
                c[i]+=b1[i];
                if(c[i]>=2) {
                    c[i]%=2;
                    c[i+1]+=1;
                }
            }
            for(j=i;j<longLen;j++) {
                if(c[j]>=2) {
                    c[j]%=2;
                    c[j+1]+=1;
                }
            }
            if(c[longLen]==0) {
                int d[]=new int[longLen];
                for(i=0;i<longLen;i++) {
                    d[i]=c[i];
                }
                return d;
            }
            return c;
        }else if(lenA<lenB) {
            shortLen=lenA;
            longLen=lenB;
            int c[]=new int[longLen+1];
            for(i=0;i<longLen;i++) {
                c[i]=b1[i];
            }
            c[i]=0;
            for(i=0;i<shortLen;i++) {
                c[i]+=a1[i];
                if(c[i]>=2) {
                    c[i]%=2;
                    c[i+1]+=1;
                }
            }
            for(j=i;j<longLen;j++) {
                if(c[j]>=2) {
                    c[j]%=2;
                    c[j+1]+=1;
                }
            }
            if(c[longLen]==0) {
                int d[]=new int[longLen];
                for(i=0;i<longLen;i++) {
                    d[i]=c[i];
                }
                return d;
            }
            return c;
        }else {
            longLen=lenB;
            int c[]=new int[longLen+1];
            for(i=0;i<longLen;i++) {
                c[i]=a1[i];
            }
            c[i]=0;
            for(i=0;i<longLen;i++) {
                c[i]+=b1[i];
                if(c[i]>=2) {
                    c[i]%=2;
                    c[i+1]+=1;
                }
            }
            if(c[longLen]==0) {
                reversalArray(c);
                int d[]=new int[longLen];
                for(i=0;i<longLen;i++) {
                    d[i]=c[i];
                }
                return d;
            }
            return c;
        }
    }
    public static boolean reversalArray(int[] a) {
        int i,j;
        int len=a.length;
        int temp=0;
        for(i=0,j=len-1;i<(len/2+1);i++,j--) {
             temp=a[i];
            a[i]=a[j];
            a[j]=temp;
        }
        return true;
    }
    public static int[] reversal(int[] a) {
        int b[]=new int[a.length];
        int i,j;
        for(i=0,j=a.length-1;i<a.length;i++,j--) {
            b[i]=a[j];
        }
        return b;
    }
    public static int[] stringFormatInteger(String s) {
        int len=s.length();
        int[] a=new int[len];
        for(int i=0;i<len;i++) {
            a[i]=s.charAt(i)-'0';
        }
        return a;
    }
    public static String integerFormatString(int[] a) {
        
        int len=a.length;
        char[] ch=new char[len];
        for(int i=0;i<len;i++) {
            switch(a[i]) {
            case 0:
                ch[i]='0';break;
            case 1:
                ch[i]='1';break;
            case 2:
                ch[i]='2';break;
            case 3:
                ch[i]='3';break;
            case 4:
                ch[i]='4';break;
            case 5:
                ch[i]='5';break;
            case 6:
                ch[i]='6';break;
            case 7:
                ch[i]='7';break;
            case 8:
                ch[i]='8';break;
            case 9:
                ch[i]='9';break;
                default:break;
            }
        }
        String str=new String(ch);
        return str;
    }
}   










