[Leetcode] 46. Permutations
https://leetcode.com/problems/permutations/서로 다른 숫자로 이루어진 리스트가 주어졌을 때, 이를 이용해 만들 수 있는 모든 permutation들을 구하는 문제
Example 1
- Input : nums = [1,2,3]
- Output : [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
Example 2
- Input : nums = [0,1]
- Output : [[0,1],[1,0]]
Example 3
- Input : nums = [1]
- Output : [[1]]
Solution 1
Note
- rec() 함수를 생성하여 recursive하게 해결
- 앞에서 만들어진 리스트(temp)와 남은 리스트(remain)를 관리
- 얕은 복사의 문제로
temp.append(num)
대신에temp + [num]
을,rem = remain.remove(num)
이나del num[i]
대신에remain[:i] + remain[i+1:]
을 사용
1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
res = []
def rec(self, temp: List[int], remain: List[int]):
if not remain :
res.append(temp)
return
for i, num in enumerate(remain) :
rem = remain[:i] + remain[i+1:]
rec(self, temp + [num], rem)
rec(self, [], nums)
return res
Solution 2
Note
itertools의 permutations 함수를 사용
1
2
3
4
5
from itertools import permutations
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
return permutations(nums)