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

1.题目解析

2.讲解算法原理

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

2.设计代码

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

3.编写代码

java 复制代码
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);
            }
            
            
        }
    }
}
相关推荐
董董灿是个攻城狮12 分钟前
022、什么是卷积的特征图?
算法
懒洋洋爱睡觉22 分钟前
考研数据结构线性表之顺序表
数据结构·算法
brilliantgby41 分钟前
蓝桥杯3525 公因数匹配 | 枚举+数学
python·算法·蓝桥杯
道剑剑非道44 分钟前
QT开发技术 【基于TinyXml2的对类进行序列化和反序列化】一
数据库·qt·算法
不去幼儿园1 小时前
【博客之星】2024年度个人成长、强化学习算法领域总结
人工智能·python·算法·机器学习·强化学习·个人总结
爱学习的uu1 小时前
KAGGLE竞赛实战2-捷信金融违约预测竞赛-part2-用lightgbm建立baseline
python·机器学习·金融
win水3 小时前
数据结构(初阶)(一)----算法复杂度
c语言·数据结构·算法
I_Am_Me_3 小时前
【专题二 二叉树中的深搜】814. 二叉树剪枝
算法·剪枝
我想吃余3 小时前
高阶C语言|库函数qsort的使用以及用冒泡排序实现qsort的功能详解
c语言·开发语言·数据结构·算法