难度中等160
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
- 所有数字都是正整数。
- 解集不能包含重复的组合。
示例 1:
输入: k = 3, n = 7 输出: [[1,2,4]]
示例 2:
输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
使用dfs
#include <iostream>
#include <vector>
using namespace std;
void dfs(vector< vector<int> >& res, vector<int>& temp,int n,int k,int x, int sum){
int i;
if(temp.size() == k){
if(sum == n){
res.push_back(temp);
}
return;
}
for(i=x+1;i<=9-(k-temp.size())+1;i++){
temp.push_back(i);
dfs(res, temp,n,k,i, sum + i);
temp.pop_back();
}
}
vector< vector<int> > combine(int n, int k) {
vector< vector<int> > res;
vector<int> temp;
dfs(res,temp,n,k,0, 0);
return res;
}
int main(){
vector< vector<int> > re = combine(7, 3);
cout << re[0][0] << endl;
}