Leetcode Python - 90. Subsets II

Leetcode #90 - Subsets II

리트코드의 문제 90 ‘Subsets II’을 파이썬으로 풀어 보도록 하겠습니다. discuss를 보도록 하겠습니다.

dfs를 이용해 풀 수 있습니다. 여기서 순서가 없는 부분집합을 구해야하기 때문에 [1,2][2,1] 을 같은 집합으로 취급해야 합니다. 또한, 중복된 숫자가 존재하기 때문에, 중복된 숫자가 들어가는 것을 방지해야 합니다.

class Solution:
    def subsetsWithDup(self, nums):
        ret = []
        self.dfs(sorted(nums), [], ret)
        return ret
    
    def dfs(self, nums, path, ret):
        ret.append(path)
        for i in range(len(nums)):
            if i > 0 and nums[i-1] == nums[i]:
                continue
            self.dfs(nums[i+1:], path + [nums[i]], ret)
if i > 0 and nums[i-1] == nums[i]:

정렬시킨 nums를 위 조건을 통해 같은 값이 들어가는 것을 방지하였습니다.

시간복잡도는 O(2^n) : n이 커질 수록 2의 n 거듭수 만큼 커지고 있음

공간복잡도는 O(n) : ret,path 선언