DFS
class Solution {
public:
vector<vector<int>> Ans;
vector<int> AnAns;
int K;
int N;
vector<vector<int> > combinationSum3(int k, int n) {
K = k;
N = n;
Ans.clear();
AnAns.resize(k);
for (int i = 1; i <= 9; i++) AnAns[0] = i, DFS(i, 1);
return Ans;
}
void DFS(int sum, int p) {
if (p == K) {
if (sum == N) Ans.push_back(AnAns);
return;
}
for (int i = AnAns[p - 1] + 1; i <= 9; i++) {
if (sum + i <= N) {
AnAns[p] = i;
DFS(sum + i, p + 1);
}
else return;
}
}
};
原文:http://blog.csdn.net/u012925008/article/details/45965623