-
Notifications
You must be signed in to change notification settings - Fork 125
/
Copy pathChaedie.py
35 lines (27 loc) ยท 1.14 KB
/
Chaedie.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
"""
Solution:
์ต์ด ํ์ด ๋น์์ ๋จ์ํ dfs๋ก ํ์์ผ๋ ์๊ฐ ์ด๊ณผ๋ก ์คํจํ์ต๋๋ค.
์ดํ ํ์ด ์ค๋ช
์ ํตํด i ๋ฒ์งธ ์ซ์๋ฅผ ๋ฃ๊ฑฐ๋ / ์๋ฃ๊ฑฐ๋ ๋ผ๋ ์กฐ๊ฑด์ผ๋ก i๋ฅผ ๋๋ ค๊ฐ๋๋ก ์งํํ๋ ๋ฐฑํธ๋ํน์ ํ๋ฉด ๋๋ค๋์ ์ ๋ฐฐ์ ์ต๋๋ค.
์ด๋ฅผ ํตํด ๋ถํ์ํ ์ค๋ณต์ ์ค์ด๊ณ ํจ์จ์ ์ธ ๊ตฌํ์ด ๊ฐ๋ฅํด์ง๋๋ค.
C: len(candidates)
T: target size
Time: O(C^T) = ๋ผ๊ณ ์ค๋ช
๋์ด ์๋๋ฐ ์์ฐํ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
Space: O(T) = ์ฌ๊ท๊ฐ ๊ฐ์ฅ ๊น์ ๋ [1,1,1,1...] T ๋งํผ์ด๊ธฐ ๋๋ฌธ์ O(T)
"""
class Solution:
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
result = []
sol = []
n = len(candidates)
def backtrack(i, cur_sum):
if cur_sum == target:
result.append(sol.copy())
return
if cur_sum > target or i == n:
return
backtrack(i + 1, cur_sum)
sol.append(candidates[i])
backtrack(i, cur_sum + candidates[i])
sol.pop()
backtrack(0, 0)
return result