Leetcode Python - 40. Combination Sum II

Leetcode #40 - Combination Sum II

이번에는 특정 챕터별로 문제들을 풀어보겠습니다. string을 집중적으로 풀어보겠습니다.

리트코드의 문제 40 ‘Combination Sum II’을 파이썬으로 풀어 보도록 하겠습니다.

포인트는 dfs를 이용해 recursion하게 풀 수 있습니다.

전체 코드는 아래와 같습니다.

class Solution:
    def combinationSum2(self, candidates, target):
        res = []
        candidates.sort()
        self.dfs(candidates, target, [], res)
        return res
    
    def dfs(self, nums, target, r, res):
        if target == 0:
            res.append(r)
            return
        if target < 0:
            return
        for i in range(len(nums)):
            if i == 0 or nums[i-1] != nums[i]:
                self.dfs(nums[i+1:], target-nums[i], r+[nums[i]], res)

candidates 의 크기가 n target 이 m 일때

시간복잡도는

  • 최악의 경우 O(n^n) (candidates에 1이 있을 경우 n번씩 for loop 계속 1씩 target이 줄어들면서 진행됨) n(n-1)(n-2)

공간복잡도는

  • 최악의 경우 O(n^2) : n+(n-1)+(n-2)+(n-3)…+1 = n(n+1)/2