File tree 4 files changed +67
-25
lines changed
solution/0300-0399/0377.Combination Sum IV
4 files changed +67
-25
lines changed Original file line number Diff line number Diff line change 56
56
57
57
<!-- 这里可写通用的实现逻辑 -->
58
58
59
+ 简单动态规划,` dp[i] ` 表示总和为 ` i ` 的元素组合的个数。
60
+
59
61
<!-- tabs:start -->
60
62
61
63
### ** Python3**
62
64
63
65
<!-- 这里可写当前语言的特殊实现逻辑 -->
64
66
65
67
``` 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]
67
77
```
68
78
69
79
### ** Java**
70
80
71
81
<!-- 这里可写当前语言的特殊实现逻辑 -->
72
82
73
83
``` 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
+ }
75
98
```
76
99
77
100
### ** ...**
Original file line number Diff line number Diff line change @@ -49,18 +49,41 @@ Note that different sequences are counted as different combinations.
49
49
50
50
## Solutions
51
51
52
+ ` dp[i] ` represents the number of element combinations whose sum is ` i ` .
53
+
52
54
<!-- tabs:start -->
53
55
54
56
### ** Python3**
55
57
56
58
``` 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]
58
68
```
59
69
60
70
### ** Java**
61
71
62
72
``` 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
+ }
64
87
```
65
88
66
89
### ** ...**
Original file line number Diff line number Diff line change 1
1
class Solution {
2
- public int combinationSum4 (int [] n , int target ) {
2
+ public int combinationSum4 (int [] nums , int target ) {
3
3
int [] dp = new int [target + 1 ];
4
- Arrays .fill (dp , -1 );
5
4
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
+ }
22
11
}
23
-
24
- dp [target ] = rt ;
25
12
return dp [target ];
26
13
}
27
- }
14
+ }
Original file line number Diff line number Diff line change
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 ]
You can’t perform that action at this time.
0 commit comments