Programmers-フリップバイナリ(Java)



問題の説明


パラメータは自然数nを与える.nを三進法で前後に逆さまにし、それを十進法で表す数で返し、解関数を完成させる.

せいげんじょうけん

  • nは1000000を超える自然数である.
  • I/O例


    nresult457125229

    I/O例説明


    I/O例#1
  • 回答は次のとおりです.
  • n(10進法)n(2進法)前後反転(2進法)10進法表現4512000217
  • に従って7を返さなければなりません.
  • I/O例#2
  • 回答は次のとおりです.
  • n(10進法)n(2進法)n(2進法)前後反転(2進法)10進法表現1251122,221,2229
    したがって、229に戻る必要があります.

    コード-最初の解

    class Solution {
        public int solution(int n) {
           int answer = 0;
    
           String ten_to_three = "";
    
           // (1)
           while (n > 0) {
               int share = n / 3;
               int remainder = n % 3;
               if (remainder > 9) {
                   ten_to_three = (char) (remainder + 55) + ten_to_three;
               } else {
               	ten_to_three = remainder + ten_to_three;
               }
               n = share;
           }
    
           	// (2)
       		StringBuffer sb = new StringBuffer(ten_to_three);
       		String reverse_ten_to_three = sb.reverse().toString();
    
    
       		answer = Integer.parseInt(reverse_ten_to_three, 3);
    
           return answer;
        }
    } 
    (1):10進数nを3進数に変換しten to 3に代入する
    (2):StringBufferを使用して古い3進法10 to 3を反転

    和弦-2番目の解

    // (1)
    class Solution {
        public int solution(int n) {
           int answer = 0;
    
           String ten_to_three = "";
    
           // (2)
           ten_to_three = Integer.toString(n, 3);
    
           	// (3)
       		StringBuffer sb = new StringBuffer(ten_to_three);
       		String reverse_ten_to_three = sb.reverse().toString();
    
    
       		answer = Integer.parseInt(reverse_ten_to_three, 3);
    
           return answer;
        }
    } 
    (1):これらの問題はすべてIntegerの方法で解決された.最初の回答に比べて実行時間が大幅に短縮されました.
    (2):10進数nを3進数に変換しten to 3に代入する
    (3):StringBufferを使用して構築された3進法10 to 3を反転

    📝 結果



    😃 に感銘を与える

  • の最初の解答での結果は通過したが、MS(実行結果の実行速度)は全体的に高く測定された.そこで,msをさらに減らすためにfor文に代わるIntegerを考案した.幸いmsが減った.
  • 👍 Irishのすべてのコードを表示


    -> Irish Github