leetcode---Add Binary

4360 ワード

Given two binary strings, return their sum (also a binary string).
For example, a = “11” b = “1” Return “100”.
問題を解く構想には3つの注意点がある:進位、どちらがもっと長く、どのように戻るか.1、キャリーについてはcharAt(i)-‘0’を用いて各ビットの数値を得る.次に、除算2と型2とを用いて操作を行い、キャリーは循環的に伝達することができる.2、もっと長いのは、配列の合併と似ていて、まず2つが存在するときを見て、それからそれぞれが残っているかどうかを見ます.3、戻り値はStringBuilderでつなぎ合わせるが、最後にキャリーを入れて反転しstringを回す必要がある.
public class Solution {
    public String addBinary(String a, String b) {
        if(a==null||a.length()==0) return b;
        if(b==null||b.length()==0) return a;
        int i=a.length()-1;
        int j=b.length()-1;
        int carry=0;
        StringBuilder r=new StringBuilder();
        while(i>=0&&j>=0){
            int re=(int)(a.charAt(i)-'0'+b.charAt(j)-'0')+carry;
            carry=re/2;
            re=re%2;
            r.append(re);
            i--;
            j--;
        }

        while(i>=0){
            int re=(int)(a.charAt(i)-'0')+carry;
            carry=re/2;
            re=re%2;
            r.append(re);
            i--;
        }

          while(j>=0){
            int re=(int)(b.charAt(j)-'0')+carry;
            carry=re/2;
            re=re%2;
            r.append(re);
            j--;
        }

        if(carry>0){
            r.append(carry);
        }
        return r.reverse().toString();

    }
}

コードが少し長くなりました:圧縮して、他の人のコードから転送します:
class Solution {
    public String addBinary(String a, String b) {
        int c = 0;
        StringBuilder sb = new StringBuilder();
        for(int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0;){
            if(i >= 0) c += a.charAt(i--) - '0';
            if(j >= 0) c += b.charAt(j--) - '0';
            sb.insert(0, (char)((c % 2) + '0'));
            c /= 2;
        }
        if(c == 1) sb.insert(0, "1");
        return sb.toString();
    }
}