216. 组合总和 III

Problem: 216. 组合总和 III

思路

与题目组合相识,用回溯算法暴力搜索,但是此题限定的1-9,并且不能重复。

此题中要注意:backTracing(k,n,i + 1);不要写错了,一开始我写成了backTracing(k,n,startIndex + 1);

并且我们可以进行减枝,if(sum > n) return;

回溯真的是一个美妙的过程,无论成功与否都可以回溯,要是人人生也如此就好了。

复杂度

时间复杂度:

添加时间复杂度, 示例: $O(n)$

空间复杂度:

添加空间复杂度, 示例: $O(n)$

Code

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
vector<int> path;
int sum;
vector<vector<int>> res;
void backTracing(int k,int n,int startIndex) {
if(sum > n) return;
if(path.size() == k) {
if(sum == n) {
res.push_back(path);
return;
} else {
return;
}
}
for(int i = startIndex; i <= 9; i++) {
path.push_back(i);
sum += i;
backTracing(k,n,i + 1);
path.pop_back();
sum -= i;
}
}
vector<vector<int>> combinationSum3(int k, int n) {
backTracing(k,n,1);
return res;
}
};