力扣链接:https://leetcode.cn/problems/combination-sum-iii/description/
题目描述:
找出所有相加之和为 n
的 k
个数的组合,且满足下列条件:
- 只使用数字1到9
- 每个数字 最多使用一次
返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。
题解如下:
class Solution {
public:
vector<int>path;
vector<vector<int>>result;
int sum=0;
void backtracking(int n,int k,int startindex)
{
if(path.size()==k){
if(sum==n)
{
result.push_back(path);
return ;
}else{
return ;
}
}
for(int i=startindex;i<=9;i++)
{
path.push_back(i);
sum+=i;
backtracking(n,k,i+1);
//回溯
path.pop_back();
sum-=i;
}
}
public:
vector<vector<int>> combinationSum3(int k, int n) {
backtracking(n,k,1);
return result;
}
};
笔者的思路:设置全局变量sum 记录当前的和 回溯时把这个值减去.