Permutations
LeetCode 46. Permutations
원문
Given an array nums
of distinct integers, return all the possible permutations. You can return the answer in any order.
풀이
백트래킹.
- 지금까지 추가한 숫자 집합의 크기가
nums
의 크기와 같다면 결과 배열에 집합을 추가한다. - 그렇지 않다면
nums
를 순회한다. (인덱스는i
로 표기한다.)i
가 방문처리 되어 있다면 넘어간다.- 그렇지 않다면
i
를 방문처리 한다. - 숫자 집합에
nums[i]
를 추가한다. - 함수 재귀호출
i
의 방문처리를 취소한다.- 숫자 집합에서
nums[i]
를 제거한다.
코드
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
def permutation():
if len(route) == len(nums):
result.append(list(route))
return
for i in range(len(nums)):
if not visited[i]:
visited[i] = True
route.append(nums[i])
permutation()
visited[i] = False
route.pop()
visited = [False for i in range(len(nums))]
result = list()
route = list()
permutation()
return result
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
List<List<Integer>> result = new ArrayList<>();
private void backtrack(List<Integer> numbers, int[] nums, Set<Integer> used) {
if (numbers.size() == nums.length) {
result.add(new ArrayList<>(numbers));
return;
}
for (int num: nums) {
if (used.contains(num)) {
continue;
}
numbers.add(num);
used.add(num);
backtrack(numbers, nums, used);
used.remove(num);
numbers.remove(numbers.size() - 1);
}
}
public List<List<Integer>> permute(int[] nums) {
backtrack(new ArrayList<>(), nums, new HashSet<Integer>());
return result;
}
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.