알고리즘

[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