题目链接:77. 组合 - 力扣(LeetCode)
代码如下:
class Solution {
private:
vector<vector<int>> result;
vector<int> path;
void backtracking(int n, int k, int startIndex)
{
if(path.size() == k)
{
result.push_back(path);
return ;
}
for(int i = startIndex; i <= n - (k - path.size()) + 1; i++)
{
path.push_back(i);
backtracking(n, k, i + 1);
path.pop_back();
}
}
public:
vector<vector<int>> combine(int n, int k) {
backtracking(n, k, 1);
return result;
}
};
实际上这个代码没做什么改变,其实就是在原来的单层循环里面的区间(startIndex,n)这个区间做文章,也就是在这个里面去做一个剪枝的操作。
什么是剪枝呢,也就是把一个题目抽象做一个树的话,那么我们再去寻找一些本来就已经知道不符合的条件了,再去做一个算法的剪枝操作即可。