【专题三:穷举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);
            }
            
            
        }
    }
}
相关推荐
倚楼听风语8 小时前
Kotlin 协程与 suspend 原理详解
java·算法·kotlin
程序员清风8 小时前
双指针与滑动窗口:高效处理连续区间
开发语言·算法
代钦塔拉8 小时前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式
思茂信息8 小时前
电磁仿真学涉及哪些算法?
人工智能·算法·数学建模·matlab·emc·电磁仿真·仿真辐射
糖果豆豆8 小时前
让 AI 自查三遍,它只会把错的说得更像对的——检查的人和被检查的,是同一个
算法·架构
2401_872418789 小时前
机器学习绪论
人工智能·深度学习·机器学习
buddyMe智能助手10 小时前
长任务拆给谁?把专门化智能体存成可复用、会增长的「选项」
人工智能·深度学习·安全·机器学习·aigc
总裁余(余登武)10 小时前
K-means算法改进(Python版)
python·算法·kmeans
灯澜忆梦10 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法
xxwl58510 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法