LeetCode77:组合(剪枝操作)

时间:2024-11-17 08:08:14

题目链接: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)这个区间做文章,也就是在这个里面去做一个剪枝的操作。

什么是剪枝呢,也就是把一个题目抽象做一个树的话,那么我们再去寻找一些本来就已经知道不符合的条件了,再去做一个算法的剪枝操作即可。