중복되는 숫자가 포함된 리스트가 주어졌을 때, 이를 이용해 만들 수 있는 모든 permutation들을 구하는 문제
Example 1
- Input : nums = [1,1,2]
- Output : [[1,1,2],[1,2,1],[2,1,1]]
Example 2
- Input : nums = [1,2,3]
- Output : [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
Solution 1
Note
- rec() 함수를 생성하여 recursive하게 해결
- 앞에서 만들어진 리스트(temp)와 남은 리스트(remain)를 관리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
res = []
def rec(self, temp: List[int], remain: List[int]):
if not remain :
if temp not in res :
res.append(temp)
return
seen = remain[0] - 1
for i, num in enumerate(remain) :
if num != seen :
rem = remain[:i] + remain[i+1:]
rec(self, temp + [num], rem)
seen = num
rec(self, [], nums)
return res
|
Solution 2
Note
- itertools의 permutations 함수를 사용
- set으로 중복을 제거한 후, list의 형태로 변경하여 리턴
1
2
3
4
5
| from itertools import permutations
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
return list(set(permutations(nums)))
|