백 트레킹을 이용해 쉽게 풀이할 수 있는 문제이다.
순열을 구해 결괏값으로 반환하면 됨
function permute(nums: number[]): number[][] {
// 결과를 저장할 배열
const result = [];
// 재귀 함수 정의
function backtrack(current: number[], remaining: number[]) {
// 기저 조건: 남은 숫자가 없으면 현재 순열을 결과에 추가
if (remaining.length === 0) {
result.push([...current]);
return;
}
// 남아있는 각 숫자에 대해 재귀 호출
for (let i = 0; i < remaining.length; i++) {
// 현재 숫자를 선택
current.push(remaining[i]);
// 선택한 숫자를 제외한 나머지 숫자들로 새 배열 생성
const newRemaining = remaining.slice(0, i).concat(remaining.slice(i + 1));
// 재귀 호출
backtrack(current, newRemaining);
// 백트래킹: 선택한 숫자 제거
current.pop();
}
}
// 초기 호출
backtrack([], nums);
return result;
}