Leetcode Python - 39. Combination Sum
Leetcode #39 - Combination Sum
이번에는 특정 챕터별로 문제들을 풀어보겠습니다. string을 집중적으로 풀어보겠습니다.
리트코드의 문제 39 ‘Combination Sum’을 파이썬으로 풀어 보도록 하겠습니다.
포인트는 dfs를 이용해 recursion하게 풀 수 있습니다.
전체 코드는 아래와 같습니다.
class Solution:
def combinationSum(self, candidates, target):
res = []
self.dfs(candidates, target, [], res)
return res
def dfs(self, candidates, target, r, res):
if target == 0:
res.append(r)
return
if target < 0:
return
for i in range(len(candidates)):
self.dfs(candidates[i:], target-candidates[i], r+[candidates[i]], res)
candidates 의 크기가 n target 이 m 일때
시간복잡도는
- 최악의 경우 O(n^m) (candidates에 1이 있을 경우 n번씩 for loop 계속 1씩 target이 줄어들면서 진행됨)
공간복잡도는
- 최악의 경우 O(m^2) : [1,1,1,…1] 처럼 m개 만큼 필요하고 다음은 m-1 … 될것이라 가정함