1. 程式人生 > >LeetCode 二進位制求和(Add Binary)

LeetCode 二進位制求和(Add Binary)

題目
給定兩個二進位制字串,返回他們的和(用二進位制表示)。
輸入為非空字串且只包含數字 1 和 0。
示例
示例 1:
輸入: a = “11”, b = “1”
輸出: “100”
示例 2:
輸入: a = “1010”, b = “1011”
輸出: “10101”

思路
將二進位制字串從後到前依次相加,根據結果來新字串賦值。

 public String addBinary(String a, String b) {

         String result ="";
         int sum=0;
         int alength = a.length();
         int bLength =
b.length(); while(alength>0 || bLength>0){ if(alength>0){ sum+=Integer.parseInt(a.substring(alength-1,alength)) ; alength--; } if(bLength>0){ sum+=Integer.parseInt(b.substring(bLength-1,bLength)) ; bLength--
; } if(sum==3){ result="1"+result; sum=1; }else if(sum==2){ result="0"+result; sum=1; }else{ result=""+sum+result; sum=0; } } if
(sum==1){ result="1"+result; } return result; }

優化思路: 以數字的形式進行進行賦值

 public String addBinary(String a, String b) {
        int al = a.length();
        int bl = b.length();
        int mer = 0;
        int sub = Math.max(al, bl);
        char[] resCh = new char[sub+1];
        for(int i=0; i<sub+1; i++){
            int ai = (al>i)?(a.charAt(al-1-i)-'0'):0;
            int bi = bl>i?(b.charAt(bl-1-i)-'0'):0;
            mer = ai + bi + mer;
            resCh[sub-i] = (char)(mer%2+'0');
            mer = mer/2;
        }
        int bal = '1' - resCh[0];
        return new String(resCh, bal, resCh.length-bal);
    }