【专题三:穷举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);
            }
            
            
        }
    }
}
相关推荐
Yeats_Liao18 小时前
MindSpore开发之路(二十四):MindSpore Hub:快速复用预训练模型
人工智能·分布式·神经网络·机器学习·个人开发
千金裘换酒19 小时前
LeetCode反转链表
算法·leetcode·链表
格林威19 小时前
传送带上运动模糊图像复原:提升动态成像清晰度的 6 个核心方案,附 OpenCV+Halcon 实战代码!
人工智能·opencv·机器学习·计算机视觉·ai·halcon·工业相机
byzh_rc19 小时前
[认知计算] 专栏总结
线性代数·算法·matlab·信号处理
qq_4335545420 小时前
C++ manacher(求解回文串问题)
开发语言·c++·算法
Aurora-Borealis.20 小时前
Day27 机器学习流水线
人工智能·机器学习
歌_顿20 小时前
知识蒸馏学习总结
人工智能·算法
闲看云起20 小时前
LeetCode-day6:接雨水
算法·leetcode·职场和发展
没学上了21 小时前
VLM_一维离散卷积与二维离散卷积(还是复习感觉还行)
算法
黛色正浓21 小时前
leetCode-热题100-贪心合集(JavaScript)
javascript·算法·leetcode