【专题三:穷举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);
            }
            
            
        }
    }
}
相关推荐
夏末秋也凉3 分钟前
力扣-回溯-131 分割回文串
算法·leetcode
努力可抵万难6 分钟前
【算法系列】leetcode1419 数青蛙 --模拟
c++·算法·模拟
ww180007 分钟前
多目标粒子群优化算法-MOPSO-(机器人路径规划/多目标信号处理(图像/音频))
人工智能·算法·分类·信号处理
liruiqiang059 分钟前
线性模型 - Logistic 回归
人工智能·机器学习·数据挖掘·回归
wen__xvn2 小时前
每日一题洛谷P1914 小书童——凯撒密码c++
数据结构·c++·算法
lqqjuly2 小时前
人工智能驱动的自动驾驶:技术解析与发展趋势
人工智能·机器学习·自动驾驶
thinkMoreAndDoMore2 小时前
深度学习(2)-深度学习关键网络架构
人工智能·深度学习·机器学习
BUG 劝退师2 小时前
八大经典排序算法
数据结构·算法·排序算法
山海青风2 小时前
从零开始玩转TensorFlow:小明的机器学习故事 1
人工智能·机器学习·tensorflow
orion-orion3 小时前
学习理论:预测器-拒绝器多分类弃权学习
机器学习·统计学习·学习理论