【专题三:穷举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);
            }
            
            
        }
    }
}
相关推荐
少林码僧11 分钟前
2.29 XGBoost、LightGBM、CatBoost对比:三大梯度提升框架选型指南
人工智能·机器学习·ai·数据挖掘·数据分析·回归
春日见15 分钟前
控制算法:PP(纯跟踪)算法
linux·人工智能·驱动开发·算法·机器学习
智者知已应修善业19 分钟前
【编写函数求表达式的值】2024-4-3
c语言·c++·经验分享·笔记·算法
Yeats_Liao29 分钟前
MindSpore开发之路(二十六):系列总结与学习路径展望
人工智能·深度学习·学习·机器学习
sinat_2869451931 分钟前
opencode
人工智能·算法·chatgpt
gorgeous(๑>؂<๑)35 分钟前
【中科院-张启超组-AAAI26】WorldRFT: 用于自动驾驶的带强化微调的潜在世界模型规划
人工智能·机器学习·自动驾驶
工口发动机1 小时前
ABC440DEF简要题解
c++·算法
C++ 老炮儿的技术栈1 小时前
什么是通信规约
开发语言·数据结构·c++·windows·算法·安全·链表
零小陈上(shouhou6668889)1 小时前
K-近邻算法 - lazy learning的代表
算法·近邻算法