[プログラマ]バイナリ形式のコピーを繰り返す



📌くりかえしにしんへんかん


0と1からなる任意の文字列xに対して、次のバイナリ形式のコピーを定義します.1. x의 모든 0을 제거합니다. 2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.例えば、x=「011010」の場合、xをバイナリ変換すると、x=「011010」->「1111」->「100」となる.
パラメータが0と1の文字列s.sが「1」になるまでsをバイナリ変換し続け、バイナリ変換の回数と変換中に削除されたすべての0の個数を配列に入れて返します.

📌せいげんじょうけん

  • sの長さは1以上150,000以下である.
  • sは、少なくとも1つの「1」を含む.
  • 📌I/O例


    sresult"110010101001"[3,8]"01110"[3,3]"1111111"[4,1]

    📌言語:JAVA


    📌solution

    class Solution {
        public int[] solution(String s) {
            int[] answer = new int[2];
            int cnt = 0;
            int zeroCnt = 0;
            
            while(!s.equals("1")){
                int oneCnt = 0;
                for(int i = 0; i < s.length(); i++){
                    if(s.charAt(i) == '1'){
                        oneCnt++;
                    }else{
                        zeroCnt++;
                    }
                }
                s = Integer.toBinaryString(oneCnt);
                cnt++;
            }
            answer[0] = cnt;
            answer[1] = zeroCnt;
            
            return answer;
        }
    }

    😎に答える


    まず,バイナリ変換の回数cntと削除された0個の数zeroCntを宣言する.文字列sが1になるまで、while文を繰り返します.whileゲート内部で1の個数oneCntを発表する.文字列から0を削除した文字列の長さをバイナリ変換する必要がありますが、0を削除すると文字列に1しか残っていないため、문자열 내의 1의 갯수 = 0을 제거한 문자열의 길이です.したがって、それぞれの状況に応じて、if文でoneCntおよびzeroCntを追加し、oneCnt法でtoBinaryStringをバイナリ変換し、sに文字列としてロードする.また、cntの値は、1回繰り返すごとに1だけ増加する.このようにしてsが1になるまでwhileゲートを繰り返した後、answerの0番目がcnt、1番目がzeroCntとなり、戻ればよい.