题目
markdown
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
只使用数字1到9
每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
题目图解
**
**
cpp代码
cpp
class Solution {
public:
vector<int> nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//回溯
void dfs(vector<vector<int>>& ans, vector<int>& path, int k, int target, int idx)
{
if (path.size() == k && target != 0)
return;
if (target == 0 && path.size() == k)
{
ans.push_back(path);
return;
}
for (int i = idx; i < nums.size(); ++i)
{
//剪枝:如果当前的值不满足条件,则后面的数字就没有必要继续了
if (target - nums[i] < 0)
{
break;
}
path.push_back(nums[i]);
dfs(ans, path, k, target - nums[i], i + 1);
//回溯
path.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n)
{
vector<vector<int>> ans;
vector<int> path;
dfs(ans, path, k, n, 0);
return ans;
}
};