【专题三:穷举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);
            }
            
            
        }
    }
}
相关推荐
你怎么知道我是队长2 分钟前
C语言---指针
c语言·数据结构·算法
汉克老师8 分钟前
GESP2025年12月认证C++五级真题与解析(编程题2 (相等序列))
c++·算法·贪心算法·中位数·质数分解
前端小L14 分钟前
双指针专题(九):谁是窗口里的老大?——「滑动窗口最大值」
javascript·算法·双指针与滑动窗口
CAU界编程小白25 分钟前
Linux系统编程系列之模拟文件操作
linux·算法
萤虫之光41 分钟前
有序数组中的单一元素(一)
数据结构·算法
dulu~dulu1 小时前
机器学习试题总结
人工智能·决策树·机器学习·支持向量机·学习笔记·线性回归·集成学习
颜酱1 小时前
从经典问题入手,吃透动态规划核心(DP五部曲实战)
前端·javascript·算法
WBluuue1 小时前
AtCoder Beginner Contest 438(ABCDEF)
c++·算法
Murphy_311 小时前
从根上了解一下复指数
算法
Run_Teenage1 小时前
Linux:理解IO,重定向
linux·运维·算法