알고리즘
[LeetCode] 46. Permutations
유병각
2022. 4. 28. 23:40
import copy
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
n = len(nums)
r = []
visited = set()
def rec(l):
if len(l) == n:
r.append(copy.deepcopy(l))
return ;
for i in nums:
if i not in visited:
visited.add(i)
l.append(i)
rec(l)
l.remove(i)
visited.remove(i)
l = []
for i in nums:
visited.add(i)
l.append(i)
rec(l)
visited.remove(i)
l.remove(i)
return r
풀이_#2
깔끔하고 정돈된 풀이.
**call by reference 를 막기 위해 arr 를 새로 만들어서 인자로 넘겨줌.
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
ret = []
def dfs(nums, arr ,ret):
if not nums:
ret.append(arr)
for i in range(len(nums)):
dfs(nums[:i] + nums[i+1:], arr + [nums[i]], ret)
dfs(nums, [], ret)
return ret