【专题三:穷举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);
            }
            
            
        }
    }
}
相关推荐
高洁017 分钟前
图神经网络初探(2)
人工智能·深度学习·算法·机器学习·transformer
爱装代码的小瓶子18 分钟前
算法【c++】二叉树搜索树转换成排序双向链表
c++·算法·链表
思成Codes21 分钟前
数据结构:基础线段树——线段树系列(提供模板)
数据结构·算法
祝余Eleanor35 分钟前
Day 51 神经网络调参指南
深度学习·神经网络·机器学习
虾..2 小时前
Linux 简单日志程序
linux·运维·算法
Trent19852 小时前
影楼精修-眼镜祛反光算法详解
图像处理·人工智能·算法·计算机视觉·aigc
蓝色汪洋2 小时前
经典修路问题
开发语言·c++·算法
吾在学习路2 小时前
【CVPR 2018最佳论文】Squeeze-and-Excitation Networks
人工智能·深度学习·神经网络·机器学习
csuzhucong2 小时前
122魔方、123魔方
算法
Salt_07282 小时前
DAY 47 Tensorboard的使用介绍
人工智能·python·深度学习·机器学习