Add Binary

来源:互联网 发布:知乎一句话 编辑:程序博客网 时间:2024/05/17 06:31

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

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

Return "100".


wa了很多次,进位考虑的不仔细。


package leetcode;


public class AddBinary {

public String addBinary(Stringa, String b) {

if (a.length() == 0)return b;

if (b.length() == 0)return a;

String ans = "";

        char[] charA =a.toCharArray();

        char[] charB =b.toCharArray();

        int i = charA.length - 1;

        int j = charB.length - 1;

        int count = 0;//进位

        

        while (i>=0 &&j>=0){

        String strTemp = addChar(charA[i],charB[j]);

        if (count > 0){

        if (strTemp.equals("10")){

            count = 1;

            ans = 1 +ans;

            }else if (strTemp.equals("1")){

            count = 1;

            ans = 0 +ans;

            }else{

            count = 0;

            ans = 1 +ans;

            }

        }else{

        if (strTemp.equals("10")){

            count = 1;

            ans = 0 +ans;

            }else if (strTemp.equals("1")){

            count = 0;

            ans = 1 +ans;

            }else{

            ans = 0 +ans;

            }

        }

        i--;

        j--;

        //System.out.println(i+"  "+j+" "+count+" "+ans+" "+strTemp);

        }

        

        if (count == 0){

        if (i >= 0){

            for (inttemp = i; temp>=0;temp--){

            ans =charA[temp] + ans;

            }

            }

            if (j >= 0){

            for (inttemp = j; temp>=0;temp--){

            ans =charB[temp] + ans;

            }

            }

        }

        

        if (count > 0){

        int flag = 1;

        if (i >= 0){

        

            for (inttemp = i; temp>=0;temp--){

            //System.out.println(charA[temp] + "");

            //System.out.println(flag + " "+ charA[temp]);

            String strTemp ="";

            if (flag == 1){

            strTemp = addChar(charA[temp],'1');

            }else{

            strTemp = addChar(charA[temp],'0');

            }

            if (strTemp.equals("10")){

                flag = 1;

                ans = 0 +ans;

                }else if (strTemp.equals("1")){

                flag = 0;

                ans = 1 +ans;

                }else{

                flag = 0;

                ans = 0 +ans;

                }

            }

            }

        

            if (j >= 0){

            for (inttemp = j; temp>=0;temp--){

            String strTemp ="";

            if (flag == 1){

            strTemp = addChar(charB[temp],'1');

            }else{

            strTemp = addChar(charB[temp],'0');

            }

            if (strTemp.equals("10")){

                flag = 1;

                ans = 0 +ans;

                }else if (strTemp.equals("1")){

                flag = 0;

                ans = 1 +ans;

                }else{

                flag = 0;

                ans = 0 +ans;

                }

            }

            }

            if (flag == 1)ans = 1 + ans;

            count = 0;

        }

        //System.out.println(count + " " + ans);

        if (count > 0) {

        ans = 1 + ans;

        }

        return ans;

    }

private String addChar(charc, char d) {

// TODO Auto-generated method stub

if (c +d == 98){

return"10";

}else if (c + d == 97){

return"1";

}else{

return"0";

}

}

public staticvoid main(String[] args) {

// TODO Auto-generated method stub

System.out.println(new AddBinary().addBinary("1111","1111")); //11110

System.out.println(new AddBinary().addBinary("1010","1011")); //10101

System.out.println(new AddBinary().addBinary("1","1")); //10

System.out.println(new AddBinary().addBinary("1","111")); //1000

System.out.println(new AddBinary().addBinary("1","11")); //100

System.out.println(new AddBinary().addBinary("100","110010")); //110110

System.out.println(new AddBinary().addBinary("10","101111")); //110001

System.out.println(new AddBinary().addBinary("101111","10")); //110001

//System.out.println(new AddBinary().addChar('1', '1'));

//System.out.println((char)a);

}


}


0 0