mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
Create 216. Combination Sum III.md
This commit is contained in:
parent
c221c609db
commit
a030b3a8d1
36
solutions/216. Combination Sum III.md
Normal file
36
solutions/216. Combination Sum III.md
Normal file
@ -0,0 +1,36 @@
|
||||
# [216. Combination Sum III](https://leetcode.com/problems/combination-sum-iii/)
|
||||
|
||||
# 思路
|
||||
从1-9十个数字中选出k个数字和为n, 要求返回所有组合.
|
||||
|
||||
这种求所有组合的题一般就是DFS, 此题为了避免重复, 我们需要一个start标记, 每次从start开始进行递归DFS调用而不是每次都从1.
|
||||
另外, 由于有了start标记, 我们也不需要使用visited数组了.
|
||||
|
||||
# C++
|
||||
``` C++
|
||||
class Solution {
|
||||
private:
|
||||
void DFS(int start, int k, int n, vector<vector<int>>&res, vector<int>&out){
|
||||
if(k < 0 || n < 0) return;
|
||||
if(k == 0 || n == 0){
|
||||
if(n == k) res.push_back(out);
|
||||
return;
|
||||
}
|
||||
// 每次从start开始进行递归调用而不是每次都从1
|
||||
for(int i = start; i <= 9; i++){
|
||||
out.push_back(i);
|
||||
DFS(i + 1, k - 1, n - i, res, out);
|
||||
out.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
vector<vector<int>> combinationSum3(int k, int n) {
|
||||
vector<vector<int>>res;
|
||||
vector<int>out;
|
||||
|
||||
DFS(1, k, n, res, out);
|
||||
return res;
|
||||
}
|
||||
};
|
||||
```
|
||||
Loading…
Reference in New Issue
Block a user