LeetCode:バイナリ合計

タイトル説明

2つのバイナリ文字列を指定し、それらの合計を(バイナリ表現で)返します。

入力は 空でない 文字列であり、数字1 と 0のみが含まれます 

アイデア

  • aは長い文字列を表すために使用され、bは他の文字列を表します
  • aを文字配列ch1に変換し、bを文字配列ch2に変換します

バックからフロントに文字列CH1とCH2を横切る。のでCH2がCH1の前に横断することができる、定義する必要があり、一時的な文字。①IfCH2がトラバースされていない場合、CH2の文字が②IfCH2がトラバースされる一時的な文字に格納されています、その後、「0」が一時文字に格納されます

  • キャリーを意味する文字を定義します。初期値は「0」です。
  • ch1保存された予備結果

状況①キャリーは「0」

  • ch1の文字== '1'およびch2の文字== '1'次に、ch1の文字を '0'に変更し、キャリーを '1'に変更します。
  • ch1の文字== '0'およびch2の文字== '1'次に、ch1の文字を '1'に変更します。

ケース②キャリーは「1」

  • ch1の文字== '0'およびch2の文字== '0'次に、ch1の文字を '1'に変更し、キャリーを '0'に変更します。
  • ch1 == '1'の文字とch2 == '1'の文字、続行
  • ch1またはch2の文字が「1」の場合、ch1の文字は「0」に変更されます。

すべてのトラバーサルが完了すると、新しいStringBufferオブジェクトが最終的な計算結果を格納するために使用されます。①キャリーが「1」でその内容が「1」の場合、ch1の要素は順番にスプライスされます。②キャリーが'1'ではなく、ch1の要素を直接接続するだけです

コード

class Solution {
    public String addBinary(String a, String b) {
        if(a.length()<b.length()){
            String tem=a;
            a=b;
            b=tem;
        }
        char[] ch1=new char[a.length()];
        char[] ch2=new char[b.length()];
        for(int i=0;i<ch1.length;i++){
            ch1[i]=a.charAt(i);
        }
        for(int i=0;i<ch2.length;i++){
            ch2[i]=b.charAt(i);
        }
        int i=ch1.length-1;
        int j=ch2.length-1;
        char char2='0';
        char tem='0';
        for(;i>=0;i--){
            char2='0';
            if(j>=0){
                char2=ch2[j];
            }
            if(tem=='0'){
                if(ch1[i]=='1'&&char2=='1'){
                    ch1[i]='0';
                    tem='1';
                }else if(ch1[i]=='0'&&char2=='1'){
                    ch1[i]='1';
                }
            }else if(tem=='1'){
                if(ch1[i]=='0'&&char2=='0'){
                    ch1[i]='1';
                    tem='0';
                }else if(ch1[i]=='1'&&char2=='1'){
                    j--;
                    continue;
                }else if(ch1[i]=='1'||char2=='1'){
                    ch1[i]='0';
                }
            }
            j--;
        }
        StringBuffer re=new StringBuffer();
        if(tem=='1'){
            re.append('1');
        }
        for(int d=0;d<ch1.length;d++){
            re.append(ch1[d]);
        }
        return re.toString();
    }   
}

 

おすすめ

転載: blog.csdn.net/weixin_43939602/article/details/114236772