218.组合III
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
class Solution {
public:
int SIZE = 9;
vector<vector<int>> result;
vector<int> path;
void backtrace(int k, int n,int start,int note,int sum) {
if(k == note && sum == n){
result.push_back(path);
return;
}
for(int i = start; i <= SIZE; i++){
path.push_back(i);
sum += i;
note++;
backtrace(k,n,i + 1,note,sum);
path.pop_back();
sum -= i;
note--;
}
}

vector<vector<int>> combinationSum3(int k, int n) {
backtrace(k,n,1,0,0);
return result;
}
};

在完成《77.组合》基础上,这道题无外乎增加一个额外的条件,即需要 path 中数的总和为 n,其中限制元素个数为 k。至于题目中明确强调的“每个数字最多使用一次 ”无需多言,在《77.组合》中就已经没有重复利用已用过的数字,因为我们都是从当前数的下一个数开始遍历,并不会回头看。