[21/10/01 KATA NINJA] permutations


復習のために、感じを探して、解いてみました.

説明する


var permute = function(nums) {
    return DFS([]);
    
    function DFS(visited){
        
        if(visited.length === nums.length) return [visited.map(i=>nums[i])];
        
        const result = []
        
        for(let check = 0;check<nums.length;check++){
            // 방문이 완료된 인덱스는 유망하지 않으므로 가지치기. 
            if(!visited.includes(check)){
                // 방문이 안된 인덱스만 방문한다.
                result.push(...DFS([...visited,check]));
                
            }
        }
        
        return result;
    }
};

もう一つの解釈


arrayの内蔵関数を用いると,より速く解くことができる.
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function(nums) {
    const finish = nums.length;
    
    return DFS([],[...nums]);
    
    function DFS(stack,nums){
        
        if(stack.length === finish){
            
            return [stack]
        }
        
        const result = [];
        
        
        for(let i=0;i<nums.length;i++){
            const data = [...nums];
            
          // 넣을 데이터는 배열에서 제외시켜버린다.
            data.splice(i,1);
            
          
          // 다음 배열은 넣은 데이터가 삭제된 배열에서 하나를 뽑는 것임.
            result.push(...DFS([...stack,nums[i]],data));
            
        }
        
        return result;
    }
};

?

다음 코드를
    return DFS([],[...nums]);
아래 코드로 변경하면
	return DFS([],nums);

속도가 더 느리다.

why...? 検索に時間がかかるからでしょうか…?
知り合いがいたらコメントで教えてください...