Skip to content

Commit 08cda14

Browse files
committed
add: 377
1 parent bdb0ccc commit 08cda14

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
| 221 | [Maximal Square](./src/221.maximal-square.py) | Medium | O(R\*C) | O(1) | Array, Dynamic Programming, Matrix | DP (Min - Max) |
1818
| 279 | [Perfect Squares](./src/279.perfect-squares.py) | Medium | O(N\*log(N)) | O(N) | Math, Dynamic Programming, BFS | DP (Min - Max) |
1919
| 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) |
2021
| 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) |
2122
| 494 | [Target Sum](./src/494.target-sum.py) | Medium | O(N\*T) | O(T) | Dynamic Programming | DP (Distinct Ways) |
2223
| 650 | [2 Keys Keyboard](./src/650.2-keys-keyboard.py) | Medium | O(N) | O(N) | Math, Dynamic Programming | DP (Min - Max) |

src/377.combination-sum-iv.py

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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+
]

0 commit comments

Comments
 (0)