n개 요소 순열 permutation 찾기 (재귀)

김민아·2023년 3월 2일
0

46. Permutations

46. Permutations

문제

입력받은 nums 배열의 가능한 모든 순열을 생성하기 위해서 재귀적으로 permuted 함수를 호출한다. 1부터 n까지 k자리수까지 조합 만들기 문제를 응용해서 접근해 보았다.

테스트 케이스

Input: nums = [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

풀이

  1. 먼저, 모든 순열을 저장할 permutations 배열을 만든다.
  2. permuted 함수를 정의한다.
  3. remaining 배열이 빌 때까지 재귀 호출을 반복한다.
  4. remaining[i]permutation에 저장하고, i번째 숫자를 제외한 나머지 요소는 remaining으로 전달한다. [...remaining.slice(0, i), ...remaining.slice(i + 1)]
  5. remaining 배열에 요소가 없으면 permutation 조합이 담긴 배열을 permutations에 푸시한다.
  6. permutations 배열을 반환한다.
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var permute = function(nums) {
  const permutations = []

  var permuted = (permutation, remaining) => {
    if (remaining.length === 0) {
      permutations.push(permutation)
    } else {
      for (let i = 0; i < remaining.length; i++) {
        const num = remaining[i]
        permuted([...permutation, num], [...remaining.slice(0, i), ...remaining.slice(i + 1)])
      }
    }
  }

  permuted([], nums)
  return permutations
};

0개의 댓글