当前位置: 首页 > article >正文

专题三_穷举vs暴搜vs深搜vs回溯vs剪枝_全排列

dfs解决 全排列&子集

1.全排列

link:46. 全排列 - 力扣(LeetCode)

全局变量+回溯

code

class Solution {
public:
    vector<vector<int>> ans;
    vector<int> cur;
    vector<bool> used;
    vector<vector<int>> permute(vector<int>& nums) {
        // 暴力枚举
        used = vector<bool>(nums.size(), false);
        dfs(nums);
        return ans;
    }

    void dfs(vector<int>& nums)
    {   // 出口
        if(cur.size() == nums.size())
        {
            ans.push_back(cur);
            return;
        }
        // 主体
        for(int i = 0; i < nums.size(); i++)
        {
            if(used[i]) continue; // 剪枝
            cur.push_back(nums[i]);
            used[i] = true;
            dfs(nums);
            used[i] = false;
            cur.pop_back(); // 回溯
        }
    }
};

2.子集

link:78. 子集 - 力扣(LeetCode)

code

class Solution {
public:
    vector<vector<int>> ans;
    vector<int> cur;
    vector<vector<int>> subsets(vector<int>& nums) {
        dfs(nums, 0);
        return ans;
    }

    void dfs(vector<int>& nums, int idx)// idx表示这次选择取舍的下标
    {
        // 出口
        if(idx >= nums.size())
        {
            ans.push_back(cur);
            return;
        }
        // 主体
        //      要了
        cur.push_back(nums[idx]);
        dfs(nums, idx + 1);
        cur.pop_back();// 回溯
        //      不要
        dfs(nums, idx + 1);
    }
};


http://www.kler.cn/a/513632.html

相关文章:

  • 如何使用 Pytest 断言测试 Python 异常处理
  • 包文件分析器 Webpack Bundle Analyzer
  • Linux-C/C++--深入探究文件 I/O (下)(文件共享、原子操作与竞争冒险、系统调用、截断文件)
  • 数据结构-队列
  • WPS数据分析000001
  • Face2face:非深度学习时代如何进行实时的三维人脸重建
  • 【王树森搜索引擎技术】概要04:搜索引擎的链路(查询词处理、召回、排序)
  • Linux的软件包管理器
  • 《Effective Java》学习笔记——第1部分 创建对象和销毁对象的最佳实践
  • Redis使用基础
  • TCP如何保证安全可靠?
  • 我国的金融组织体系,还有各大金融机构的分类,金融行业的组织
  • 【Excel】【VBA】Reaction超限点筛选与散点图可视化
  • 【线性代数】基础版本的高斯消元法
  • Keil自动生成Bin文件(2)
  • 2024年度个人成长与技术洞察总结
  • Data Filtering Network 论文阅读和理解
  • C++ 智能指针(八股总结)
  • 【组件库】使用Vue2+AntV X6+ElementUI 实现拖拽配置自定义vue节点
  • Springboot sse 示例
  • (done) 并行计算学习 (Day1: 两个简单的 OpenMP 例子)
  • JavaWeb开发(十五)实战-生鲜后台管理系统(二)注册、登录、记住密码
  • 【C++】揭秘类与对象的内在机制(核心卷之深浅拷贝与拷贝构造函数的奥秘)
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(五)-数的三次方根、机器人跳跃问题、四平方和
  • Python 进阶 - Excel 基本操作
  • 智能系统的感知和决策