本文主要是介绍【算法刷题day24】回溯算法+简单剪枝,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
77.组合
文档链接:[代码随想录]
题目链接:77.组合
题目:
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
class Solution {
private:vector<int> path;vector<vector<int>> result;void backtracking(int n, int k, int index){if(path.size() == k){result.push_back(path);return ;}for(int i = index; i <= n; 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;}
};
剪枝
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;}
};
这篇关于【算法刷题day24】回溯算法+简单剪枝的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!