Skip to content

Commit 8c6f708

Browse files
committed
feat: add solutions to lc problem: No.0216
No.0216.Combination Sum III
1 parent 0f2bb38 commit 8c6f708

File tree

6 files changed

+279
-20
lines changed

6 files changed

+279
-20
lines changed

solution/0200-0299/0216.Combination Sum III/README.md

+100-2
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,125 @@
2727
<strong>输出:</strong> [[1,2,6], [1,3,5], [2,3,4]]
2828
</pre>
2929

30-
3130
## 解法
3231

3332
<!-- 这里可写通用的实现逻辑 -->
3433

34+
DFS 回溯法。
35+
3536
<!-- tabs:start -->
3637

3738
### **Python3**
3839

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

4142
```python
42-
43+
class Solution:
44+
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
45+
def dfs(i, s, t):
46+
if i > 9 or s > n or len(t) > k:
47+
return
48+
if s == n and len(t) == k:
49+
ans.append(t[:])
50+
return
51+
i += 1
52+
t.append(i)
53+
dfs(i, s + i, t)
54+
t.pop()
55+
dfs(i, s, t)
56+
57+
ans = []
58+
dfs(0, 0, [])
59+
return ans
4360
```
4461

4562
### **Java**
4663

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

4966
```java
67+
class Solution {
68+
private List<List<Integer>> ans;
69+
70+
public List<List<Integer>> combinationSum3(int k, int n) {
71+
ans = new ArrayList<>();
72+
dfs(0, n, k, new ArrayList<>());
73+
return ans;
74+
}
75+
76+
private void dfs(int i, int n, int k, List<Integer> t) {
77+
if (i > 9 || n < 0 || t.size() > k) {
78+
return;
79+
}
80+
if (n == 0 && t.size() == k) {
81+
ans.add(new ArrayList<>(t));
82+
return;
83+
}
84+
++i;
85+
t.add(i);
86+
dfs(i, n - i, k, t);
87+
t.remove(t.size() - 1);
88+
dfs(i, n, k, t);
89+
}
90+
}
91+
```
92+
93+
### **C++**
94+
95+
```cpp
96+
class Solution {
97+
public:
98+
vector<vector<int>> ans;
99+
100+
vector<vector<int>> combinationSum3(int k, int n) {
101+
vector<int> t;
102+
dfs(0, n, k, t);
103+
return ans;
104+
}
105+
106+
void dfs(int i, int n, int k, vector<int>& t) {
107+
if (i > 9 || n < 0 || t.size() > k) return;
108+
if (n == 0 && t.size() == k)
109+
{
110+
ans.push_back(t);
111+
return;
112+
}
113+
++i;
114+
t.push_back(i);
115+
dfs(i, n - i, k, t);
116+
t.pop_back();
117+
dfs(i, n, k, t);
118+
}
119+
};
120+
```
50121
122+
### **Go**
123+
124+
```go
125+
func combinationSum3(k int, n int) [][]int {
126+
var ans [][]int
127+
var t []int
128+
var dfs func(i, n int, t []int)
129+
dfs = func(i, n int, t []int) {
130+
if i > 9 || n < 0 || len(t) > k {
131+
return
132+
}
133+
if n == 0 && len(t) == k {
134+
cp := make([]int, len(t))
135+
copy(cp, t)
136+
ans = append(ans, cp)
137+
return
138+
}
139+
i++
140+
t = append(t, i)
141+
dfs(i, n-i, t)
142+
t = t[:len(t)-1]
143+
dfs(i, n, t)
144+
}
145+
146+
dfs(0, n, t)
147+
return ans
148+
}
51149
```
52150

53151
### **...**

solution/0200-0299/0216.Combination Sum III/README_EN.md

+100-2
Original file line numberDiff line numberDiff line change
@@ -69,21 +69,119 @@ There are no other valid combinations.
6969
<li><code>1 &lt;= n &lt;= 60</code></li>
7070
</ul>
7171

72-
7372
## Solutions
7473

74+
DFS.
75+
7576
<!-- tabs:start -->
7677

7778
### **Python3**
7879

7980
```python
80-
81+
class Solution:
82+
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
83+
def dfs(i, s, t):
84+
if i > 9 or s > n or len(t) > k:
85+
return
86+
if s == n and len(t) == k:
87+
ans.append(t[:])
88+
return
89+
i += 1
90+
t.append(i)
91+
dfs(i, s + i, t)
92+
t.pop()
93+
dfs(i, s, t)
94+
95+
ans = []
96+
dfs(0, 0, [])
97+
return ans
8198
```
8299

83100
### **Java**
84101

85102
```java
103+
class Solution {
104+
private List<List<Integer>> ans;
105+
106+
public List<List<Integer>> combinationSum3(int k, int n) {
107+
ans = new ArrayList<>();
108+
dfs(0, n, k, new ArrayList<>());
109+
return ans;
110+
}
111+
112+
private void dfs(int i, int n, int k, List<Integer> t) {
113+
if (i > 9 || n < 0 || t.size() > k) {
114+
return;
115+
}
116+
if (n == 0 && t.size() == k) {
117+
ans.add(new ArrayList<>(t));
118+
return;
119+
}
120+
++i;
121+
t.add(i);
122+
dfs(i, n - i, k, t);
123+
t.remove(t.size() - 1);
124+
dfs(i, n, k, t);
125+
}
126+
}
127+
```
128+
129+
### **C++**
130+
131+
```cpp
132+
class Solution {
133+
public:
134+
vector<vector<int>> ans;
135+
136+
vector<vector<int>> combinationSum3(int k, int n) {
137+
vector<int> t;
138+
dfs(0, n, k, t);
139+
return ans;
140+
}
141+
142+
void dfs(int i, int n, int k, vector<int>& t) {
143+
if (i > 9 || n < 0 || t.size() > k) return;
144+
if (n == 0 && t.size() == k)
145+
{
146+
ans.push_back(t);
147+
return;
148+
}
149+
++i;
150+
t.push_back(i);
151+
dfs(i, n - i, k, t);
152+
t.pop_back();
153+
dfs(i, n, k, t);
154+
}
155+
};
156+
```
86157
158+
### **Go**
159+
160+
```go
161+
func combinationSum3(k int, n int) [][]int {
162+
var ans [][]int
163+
var t []int
164+
var dfs func(i, n int, t []int)
165+
dfs = func(i, n int, t []int) {
166+
if i > 9 || n < 0 || len(t) > k {
167+
return
168+
}
169+
if n == 0 && len(t) == k {
170+
cp := make([]int, len(t))
171+
copy(cp, t)
172+
ans = append(ans, cp)
173+
return
174+
}
175+
i++
176+
t = append(t, i)
177+
dfs(i, n-i, t)
178+
t = t[:len(t)-1]
179+
dfs(i, n, t)
180+
}
181+
182+
dfs(0, n, t)
183+
return ans
184+
}
87185
```
88186

89187
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> ans;
4+
5+
vector<vector<int>> combinationSum3(int k, int n) {
6+
vector<int> t;
7+
dfs(0, n, k, t);
8+
return ans;
9+
}
10+
11+
void dfs(int i, int n, int k, vector<int>& t) {
12+
if (i > 9 || n < 0 || t.size() > k) return;
13+
if (n == 0 && t.size() == k)
14+
{
15+
ans.push_back(t);
16+
return;
17+
}
18+
++i;
19+
t.push_back(i);
20+
dfs(i, n - i, k, t);
21+
t.pop_back();
22+
dfs(i, n, k, t);
23+
}
24+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
func combinationSum3(k int, n int) [][]int {
2+
var ans [][]int
3+
var t []int
4+
var dfs func(i, n int, t []int)
5+
dfs = func(i, n int, t []int) {
6+
if i > 9 || n < 0 || len(t) > k {
7+
return
8+
}
9+
if n == 0 && len(t) == k {
10+
cp := make([]int, len(t))
11+
copy(cp, t)
12+
ans = append(ans, cp)
13+
return
14+
}
15+
i++
16+
t = append(t, i)
17+
dfs(i, n-i, t)
18+
t = t[:len(t)-1]
19+
dfs(i, n, t)
20+
}
21+
22+
dfs(0, n, t)
23+
return ans
24+
}
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,24 @@
11
class Solution {
2+
private List<List<Integer>> ans;
3+
24
public List<List<Integer>> combinationSum3(int k, int n) {
3-
List<List<Integer>> ans = new ArrayList<>();
4-
robot(1, k, n, ans, new ArrayList<>());
5+
ans = new ArrayList<>();
6+
dfs(0, n, k, new ArrayList<>());
57
return ans;
68
}
79

8-
private void robot(int start, int k, int left, List<List<Integer>> ans, List<Integer> tmp) {
9-
if (k < 0 || left < 0) return;
10-
11-
if (k == 0 && left == 0) {
12-
ans.add(new ArrayList<>(tmp));
10+
private void dfs(int i, int n, int k, List<Integer> t) {
11+
if (i > 9 || n < 0 || t.size() > k) {
1312
return;
1413
}
15-
16-
for (int i = start; i <= 9; i++) {
17-
if (left >= i && k > 0) {
18-
tmp.add(i);
19-
robot(i + 1, k - 1, left - i, ans, tmp);
20-
tmp.remove(tmp.size() - 1);
21-
} else {
22-
return;
23-
}
14+
if (n == 0 && t.size() == k) {
15+
ans.add(new ArrayList<>(t));
16+
return;
2417
}
18+
++i;
19+
t.add(i);
20+
dfs(i, n - i, k, t);
21+
t.remove(t.size() - 1);
22+
dfs(i, n, k, t);
2523
}
2624
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution:
2+
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
3+
def dfs(i, s, t):
4+
if i > 9 or s > n or len(t) > k:
5+
return
6+
if s == n and len(t) == k:
7+
ans.append(t[:])
8+
return
9+
i += 1
10+
t.append(i)
11+
dfs(i, s + i, t)
12+
t.pop()
13+
dfs(i, s, t)
14+
15+
ans = []
16+
dfs(0, 0, [])
17+
return ans

0 commit comments

Comments
 (0)