JavaScriptエンコーディング「取得シーケンス」のテスト


10個以下のN個の自然数がある場合は、その中からM個を選択し、すべての列を1列にする方法を出力します.(繰り返しX)
  • 回答:
    重複除外はありません.どうしたらいいかわからない状態.
  • function solution(m, arr){         
        let answer=[];
        let n=arr.length;
        let ch=Array.from({length:m},()=>0);
        function DFS(L){
            if(L===m){
                answer.push(ch.slice());
            }
            else{
                for(let i=0; i<=m; i++){
                    ch[L]=arr[i];
                    DFS(L+1);
                }
            }
        }
        DFS(0);
        return answer;
    }
    
    let arr=[3, 6, 9];
    console.log(solution(2, arr));
  • 先生の解答:
    check配列を作成し、for文にif文を入れます.配列値を使用すると、次のインデックスは配列値を無効にします.
  • function solution(m, arr){         
        let answer=[];
        n=arr.length;
        let ch=Array.from({length:n},()=>0);
        let tmp=Array.from({length:m},()=>0);
        function DFS(L){
            if(L===m){
                answer.push(tmp.slice());
            }
            else{
                for(let i=0; i<n; i++){
                    if(ch[i]===0){
                        ch[i]=1;
                        tmp[L]=arr[i];
                        DFS(L+1);
                        ch[i]=0;
                    }
                }
            }
        }
        DFS(0);
        return answer;
    }
    
    let arr=[3, 6, 9];
    console.log(solution(2, arr));