File tree 2 files changed +59
-0
lines changed
2 files changed +59
-0
lines changed Original file line number Diff line number Diff line change 17
17
| 221 | [ Maximal Square] ( ./src/221.maximal-square.py ) | Medium | O(R\* C) | O(1) | Array, Dynamic Programming, Matrix | DP (Min - Max) |
18
18
| 279 | [ Perfect Squares] ( ./src/279.perfect-squares.py ) | Medium | O(N\* log(N)) | O(N) | Math, Dynamic Programming, BFS | DP (Min - Max) |
19
19
| 322 | [ Coin Change] ( ./src/322.coin-change.py ) | Medium | O(A\* N) | O(A) | Array, Dynamic Programming, Breadth-First Search | DP (Min - Max) |
20
+ | 377 | [ Combination Sum IV] ( ./src/377.combination-sum-iv.py ) | Medium | O(N\* T) | O(T) | Array, Dynamic Programming | DP (Distinct Ways) |
20
21
| 474 | [ Ones And Zeros] ( ./src/474.ones-and-zeros.py ) | Medium | O(M\* N\* L) | O(M\* N\* L) | Array, String, Dynamic Programming | DP (Min - Max) |
21
22
| 494 | [ Target Sum] ( ./src/494.target-sum.py ) | Medium | O(N\* T) | O(T) | Dynamic Programming | DP (Distinct Ways) |
22
23
| 650 | [ 2 Keys Keyboard] ( ./src/650.2-keys-keyboard.py ) | Medium | O(N) | O(N) | Math, Dynamic Programming | DP (Min - Max) |
Original file line number Diff line number Diff line change
1
+ # Level: Medium
2
+ # TAGS: Array, Dynamic Programming
3
+
4
+ from typing import List
5
+
6
+
7
+ class Solution :
8
+ # DP Bottom-Up | Time: O(N*T) | Space: O(T)
9
+ def combinationSum4 (self , nums : List [int ], target : int ) -> int :
10
+ n = len (nums )
11
+ memo = {}
12
+
13
+ def dfs (t ):
14
+ if t == 0 :
15
+ return 1
16
+ if t < 0 :
17
+ return 0
18
+ if t in memo :
19
+ return memo [t ]
20
+ res = 0
21
+ for j in range (n ):
22
+ res += dfs (t - nums [j ])
23
+
24
+ memo [t ] = res
25
+ return memo [t ]
26
+
27
+ return dfs (target )
28
+
29
+ # DP Top-Down | Time: O(N*T) | Space: O(T)
30
+ def combinationSum4_1 (self , nums : List [int ], target : int ) -> int :
31
+ n = len (nums )
32
+ dp = [0 ] * (target + 1 )
33
+ dp [0 ] = 1
34
+
35
+ for i in range (1 , target + 1 ):
36
+ for j in range (n ):
37
+ if i - nums [j ] >= 0 :
38
+ dp [i ] += dp [i - nums [j ]]
39
+
40
+ return dp [target ]
41
+
42
+
43
+ tests = [
44
+ (
45
+ (
46
+ [1 , 2 , 3 ],
47
+ 4 ,
48
+ ),
49
+ 7 ,
50
+ ),
51
+ (
52
+ (
53
+ [9 ],
54
+ 3 ,
55
+ ),
56
+ 0 ,
57
+ ),
58
+ ]
You can’t perform that action at this time.
0 commit comments