Skip to content

Commit a36bd6c

Browse files
authored
feat: add solutions to leetcode problem: No.0377. Combination Sum IV (doocs#363)
1 parent b5915df commit a36bd6c

File tree

4 files changed

+67
-25
lines changed

4 files changed

+67
-25
lines changed

solution/0300-0399/0377.Combination Sum IV/README.md

+25-2
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,45 @@
5656

5757
<!-- 这里可写通用的实现逻辑 -->
5858

59+
简单动态规划,`dp[i]` 表示总和为 `i` 的元素组合的个数。
60+
5961
<!-- tabs:start -->
6062

6163
### **Python3**
6264

6365
<!-- 这里可写当前语言的特殊实现逻辑 -->
6466

6567
```python
66-
68+
class Solution:
69+
def combinationSum4(self, nums: List[int], target: int) -> int:
70+
dp = [0 for i in range(target + 1)]
71+
dp[0] = 1
72+
for i in range(1, target + 1):
73+
for num in nums:
74+
if i - num >= 0:
75+
dp[i] += dp[i - num]
76+
return dp[target]
6777
```
6878

6979
### **Java**
7080

7181
<!-- 这里可写当前语言的特殊实现逻辑 -->
7282

7383
```java
74-
84+
class Solution {
85+
public int combinationSum4(int[] nums, int target) {
86+
int[] dp = new int[target + 1];
87+
dp[0] = 1;
88+
for (int i = 1; i <= target; i++) {
89+
for (int num : nums) {
90+
if (i - num >= 0) {
91+
dp[i] += dp[i - num];
92+
}
93+
}
94+
}
95+
return dp[target];
96+
}
97+
}
7598
```
7699

77100
### **...**

solution/0300-0399/0377.Combination Sum IV/README_EN.md

+25-2
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,41 @@ Note that different sequences are counted as different combinations.
4949

5050
## Solutions
5151

52+
`dp[i]` represents the number of element combinations whose sum is `i`.
53+
5254
<!-- tabs:start -->
5355

5456
### **Python3**
5557

5658
```python
57-
59+
class Solution:
60+
def combinationSum4(self, nums: List[int], target: int) -> int:
61+
dp = [0 for i in range(target + 1)]
62+
dp[0] = 1
63+
for i in range(1, target + 1):
64+
for num in nums:
65+
if i - num >= 0:
66+
dp[i] += dp[i - num]
67+
return dp[target]
5868
```
5969

6070
### **Java**
6171

6272
```java
63-
73+
class Solution {
74+
public int combinationSum4(int[] nums, int target) {
75+
int[] dp = new int[target + 1];
76+
dp[0] = 1;
77+
for (int i = 1; i <= target; i++) {
78+
for (int num : nums) {
79+
if (i - num >= 0) {
80+
dp[i] += dp[i - num];
81+
}
82+
}
83+
}
84+
return dp[target];
85+
}
86+
}
6487
```
6588

6689
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,14 @@
11
class Solution {
2-
public int combinationSum4(int[] n, int target) {
2+
public int combinationSum4(int[] nums, int target) {
33
int[] dp = new int[target + 1];
4-
Arrays.fill(dp, -1);
54
dp[0] = 1;
6-
return combinationSum4Dfs(n, dp, target);
7-
8-
}
9-
10-
private int combinationSum4Dfs(int[] n, int[] dp, int target) {
11-
if (target < 0) {
12-
return 0;
13-
}
14-
15-
if (dp[target] != -1) {
16-
return dp[target];
17-
}
18-
19-
int rt = 0;
20-
for (int v : n) {
21-
rt += combinationSum4Dfs(n, dp, target - v);
5+
for (int i = 1; i <= target; i++) {
6+
for (int num : nums) {
7+
if (i - num >= 0) {
8+
dp[i] += dp[i - num];
9+
}
10+
}
2211
}
23-
24-
dp[target] = rt;
2512
return dp[target];
2613
}
27-
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def combinationSum4(self, nums: List[int], target: int) -> int:
3+
dp = [0 for i in range(target + 1)]
4+
dp[0] = 1
5+
for i in range(1, target + 1):
6+
for num in nums:
7+
if i - num >= 0:
8+
dp[i] += dp[i - num]
9+
return dp[target]

0 commit comments

Comments
 (0)