Add Binary

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(String a, 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 (int temp = i; temp>=0; temp--){

            ans = charA[temp] + ans;

            }

            }

            if (j >= 0){

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

            ans = charB[temp] + ans;

            }

            }

        }

        

        if (count > 0){

        int flag = 1;

        if (i >= 0){

        

            for (int temp = 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 (int temp = 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(char c, char d) {

// TODO Auto-generated method stub

if (c + d == 98){

return "10";

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

return "1";

}else{

return "0";

}

}

public static void 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);

}


}


發佈了40 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章