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);
    }

猜你喜欢

转载自blog.csdn.net/qq_35033270/article/details/80699675