Programmers-フルナビゲーション>小数点の検索


説明する


まずソートと組合せを考えたが,それ以外の解法は考えられなかった.問題概念は完全に探索であり、一定の役割を果たした.2問目でしたが、1時間以上かかってしまい、結局答えられませんでした.
  • numbersを分割して配列に入れます."17"-> [1, 7]
  • 配列のコンビネーションボックスを求める.
  • の各コンビネーションボックスにおいて1つのシーケンスボックスが求められる.
  • シーケンスボックスの各ビット数を加算すると、小数点以下の結果が得られます.push()
  • 模範解答


    Set APIを使用すると、要素を簡単に検索、追加、削除できます.特定の要素を探す方法は想像以上に難しく、Set apiに慣れれば利用できるところがたくさんあります.再帰関数を用いて問題を解決したが,この方法がアルゴリズム的に有効かどうかは疑問である.
  • numbers文字列を分割して配列に入れます.
  • 反復値がSETに存在しない場合、SETに入れる.(冗長)
  • は、すべての場合に再帰探索を行い、isPrimeの場合にのみ++と回答する.
  • function solution(numbers) {
        var answer = 0;
        var n = numbers.split('');
        var nums = new Set()
        
        combi(n,'');
    
        function combi(a, s) {
            if (s.length > 0) {
                if (nums.has(Number(s))=== false) {
                    nums.add(Number(s));
                console.log(Number(s))
                    if (chkPrime(Number(s))) {
                        answer++;
                    }
                }
            }
            if (a.length > 0) {
                for (var i = 0; i< a.length; i++) {
                    var t = a.slice(0)
                    t.splice(i,1);
                    //console.log(t)
                    combi(t,s + a[i]);
                }
            }
        }
    
        function chkPrime(num) {
            if (num < 2) return false;
            if (num === 2) return true;
            for (var i = 2; i <= Math.sqrt(num); i++) {
                if (num%i===0) return false;
            }
            return true;
        }
    
        return answer;
    }

    得るべき部分

  • Set API
  • を使用
  • お手元にも1つのソリューションしかありません