题目:77. 组合 - 力扣(LeetCode)
题解:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路来自代码随想录:
带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili
对其中的剪枝条件做详细解释
剪枝部分代码为
for(int i=index;i<=n+path.size()+1-k;++i)
{
path.push_back(i);
backtracking(n,k,i+1);
path.pop_back();
}
剪枝条件为
i<=n+path.size()+1-k;
1. i是起到一个遍历的作用,未剪枝之前,它的作用是从【i,n】这个区间里遍历,找到继续加入到path里的数值
2. 给出n,k 求【1,n】中,大小为k(元素个数为k)的集合
3. 这个集合一定不是正确结果的情况:已经选择的元素个数+剩下还没选择的元素个数<k的时候一定不可能
n=4,k=4时
从{1,2,3,4}里选,选了1 剩下{2,3,4} 1+3>=4 可行
选了2 剩下{3,4}(没有1避免重复) 1+2<4 不可行
以此类推
4. 已经选择的元素个数 path.size()
剩下还未选择的元素个数 【i,n】左闭右闭区间元素个数为 n-i+1
所以 path.size()+(n-i+1)>=k 时才有可能继续文章来源:https://www.toymoban.com/news/detail-830312.html
所以条件为i<=n+path.size()+1-k;文章来源地址https://www.toymoban.com/news/detail-830312.html
到了这里,关于leetcode77组合 剪枝条件详细解释的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!