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

穷举vs暴搜vs深搜vs回溯vs剪枝专题一>全排列

题目: 

 


解析: 

 


代码: 

//用于返回最后的结果
    private List<List<Integer>> ret;

    //记录决策树元素的路径
    private List<Integer> path;

    //标记决策树元素,元素没有被使用为默认false
    private boolean[] check;
    
    public List<List<Integer>> permute(int[] nums) {
        ret = new ArrayList<>();
        path = new ArrayList<>();
        check = new boolean[nums.length];

        dfs(nums);
        return ret;
    }

    private void dfs(int[] nums){
        //递归出口
        if(path.size() == nums.length) {
            ret.add(new ArrayList<>(path));
            return;
        }

        for(int i = 0; i < nums.length; i++){
            //决策树的元素没有被选,就加入path
            if(check[i] == false){
                path.add(nums[i]);//记录路径
                check[i] = true;//被使用过就设置为false
                dfs(nums);

                //回溯:把path最后一个元素删除
                path.remove(path.size()-1);
                //剪枝:把元素标志位还原
                 check[i] = false;
            }
        }
    }

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

相关文章:

  • C++速览之智能指针
  • 【Docker】使用Dev Container进行开发
  • 【redis】redis-cli命令行工具的使用
  • 换了城市ip属地会变吗?为什么换了城市IP属地不变
  • 【C++】构造函数与析构函数
  • 【后端面试总结】tls中.crt和.key的关系
  • libilibi项目总结(18)FFmpeg 的使用
  • SSM 与 Vue 双剑合璧:新锐台球厅管理系统的匠心设计与完美实现
  • javaEE--计算机是如何工作的-1
  • AI技术在演示文稿制作中的应用一键生成PPT
  • zlmediakit搭建直播推流服务
  • Visual studio中C/C++连接mysql
  • (笔记)lib:no such lib的另一种错误可能:/etc/ld.so.conf没增加
  • Java中ArrayList和LinkedList的区别?
  • 富途证券C++面试题及参考答案
  • 先进的多模态专家需要掌握哪些知识和技能课程
  • 单片机STM32、GD32、ESP32开发板的差异和应用场景
  • Java全栈项目:学生请假管理系统
  • C++并发与多线程(高级函数async)
  • [每周一更]-(第127期):Go新项目-Gin中使用超时中间件实战(11)
  • 【深度学习基础】Windows实时查看GPU显存占用、功耗、进程状态
  • USB-A/C 2in1接口的未来应用前景分析
  • JAVA入门:使用IDE开发
  • 多模态检索增强生成
  • HarmonyOS 实时监听与获取 Wi-Fi 信息
  • 解锁Vue组件的奇妙世界