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

【专题三:穷举vs暴搜vs深搜vs回溯vs剪枝】46. 全排列

1.题目解析

2.讲解算法原理  

1.首先画出决策树,越详细越好

2.设计代码

  • 全局变量
    • List<List<Integer>> ret
    • List<Integer> path
    • boolean[] check 
  • dfs函数
    • 仅关心某一节点在干什么
  • 细节问题
  • 回溯
    • 干掉path最后一个元素
    • 修改check权限
  • 剪枝
    • check中为true的不能使用,要剪掉
  • 递归出口
    • 遇到叶子结点的时候,直接添加结果

3.编写代码 

class Solution {
    List<List<Integer>> ret;
    List<Integer> path;
    boolean[] check;

    public List<List<Integer>> permute(int[] nums) {
        ret=new ArrayList<>();
        path=new ArrayList<>();
        check=new boolean[nums.length];
        dfs(nums);
        return ret;
    }
    public void dfs(int[] nums){
        if(nums.length==path.size()){
            ret.add (new ArrayList<>(path));
            return;
        }
        for(int i=0;i<nums.length;i++){
            if(check[i]==false){
                path.add(nums[i]);
                check[i]=true;
                dfs(nums);
                //回溯,恢复现场
                check[i]=false;
                path.remove(path.size()-1);
            }
            
            
        }
    }
}


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

相关文章:

  • kubernetes学习-Service(七)
  • Oracle 可观测最佳实践
  • 图论DFS:黑红树
  • Apache Hive--排序函数解析
  • uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推
  • [LeetCode] 链表完整版 — 虚拟头结点 | 基本操作 | 双指针法 | 递归
  • Nginx关于servername配置无效的处理
  • PDF工具箱 PDF24 ,免费下载,非常好用
  • Spring Boot中的条件注解是如何工作的
  • 基于springboot+sureness的面向REST API资源无状态认证权限管理系统的后端
  • C++学习第五天
  • 前端for循环遍历2——filter使用
  • 日志模块新增配置日志根目录和项目模块功能
  • ubuntu ESP-IDF开发环境搭建
  • Golang笔记——常用库sync
  • pyqt5开发ui图形化工具
  • 网络安全工程师学习路线
  • 统计学习算法——支持向量机的基本概念
  • Comment(爆破+git泄漏+二次注入)
  • 精选100+套HTML可视化大屏模板源码素材
  • 软路由系统iStoreOS 一键安装 docker compose
  • 【机器学习:二十二、机器学习项目开发的技巧】
  • NiceFish(美人鱼)
  • Python批量发送任务请求(POST)和批量查询任务状态(GET)
  • RC2在线加密工具
  • 游戏行业销售数据分析可视化