【专题三:穷举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);
            }
            
            
        }
    }
}
相关推荐
TechNomad20 小时前
排序算法:归并排序算法
算法·排序算法
WBluuue21 小时前
数据结构和算法:Morris遍历
数据结构·c++·算法
STLearner21 小时前
AAAI 2026 | 时空数据(Spatial-temporal)论文总结[上](时空预测,轨迹挖掘,自动驾驶等)
大数据·人工智能·python·深度学习·机器学习·数据挖掘·自动驾驶
scx2013100421 小时前
20251117Manacher总结
算法·manacher
(●—●)橘子……21 小时前
记力扣42.接雨水 练习理解
笔记·学习·算法·leetcode·职场和发展
一碗姜汤21 小时前
LS性能边界、QR分解、RLS自适应
线性代数·机器学习
旺仔小拳头..1 天前
数据结构(三)----树/二叉树/完全二叉树/线索二叉树/哈夫曼树/树、二叉树、森林之间的转换/前 中 后序遍历
算法
Sheep Shaun1 天前
STL:string和vector
开发语言·数据结构·c++·算法·leetcode
winfield8211 天前
滑动时间窗口,找一段区间中的最大值
数据结构·算法
小徐Chao努力1 天前
Go语言核心知识点底层原理教程【Slice的底层实现】
开发语言·算法·golang