복습 겸, 감 잡을겸 풀어보았다.
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...? 조회하는데 시간이 더 걸려서 인건가..?
아는 사람이 있다면 댓글로 부탁드림미다...