当前位置: 首页 > news >正文

LeetCode算法心得——全排列(回溯型排列)

大家好,我是晴天学长,排列型的回溯,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪


1) .全排列

在这里插入图片描述


给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:

输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:

输入:nums = [1]
输出:[[1]]

提示:

1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums 中的所有整数 互不相同


2) .算法思路

全排列
1.建立boolean数组去标记
2.用合适的数组去存答案
3.注意回溯的时候,参数是否变回了以前的样子。


3) .算法步骤

1.创建一个整数数组nums,作为全排列的输入。
2.创建一个二维列表ans,用于存储所有的全排列结果。
3.创建一个列表path,用于存储当前的排列路径。
4.调用permute方法,将nums作为参数传入。
5.在permute方法中,创建一个布尔数组st,用于标记数组nums中的元素是否已经被访问过。
6.初始化路径列表path为空。
7.调用dfs方法,传入初始长度0、布尔数组st和路径列表path。
8.在dfs方法中,判断如果当前路径的长度等于数组nums的长度,即已经找到了一个全排列:
a. 将当前路径path的副本添加到结果列表ans中。
b. 返回。
遍历数组nums的每个元素:
a. 如果当前元素未被访问:
(1)将当前元素添加到路径列表path中。
(2)将当前元素标记为已访问。
(3)递归调用dfs方法,传入长度加1、更新后的布尔数组st和路径列表path。
(4)将当前元素标记为未访问,以便后续的回溯。
(5)从路径列表path中移除最后一个元素,恢复路径状态。
c.返回最终的结果列表ans。


4).代码示例

class Solution {private int[] nums;//方便插入List<List<Integer>> ans = new LinkedList<>();List<Integer> path;public List<List<Integer>> permute(int[] nums) {this.nums = nums;//替换成全局变量。这个类中。boolean[] st = new boolean[nums.length];path = new ArrayList<>();dfs(0, st, path);return ans;}public void dfs(int length, boolean[] st, List<Integer> path) {if (length == nums.length) {ans.add(new ArrayList<>(path));return;}for (int i = 0; i < nums.length; i++) {if (!st[i]) {path.add(nums[i]);st[i] = true;dfs(length + 1, st, path);st[i]=false;path.remove(path.size()-1);}}}}

5).总结

  • 正确的排列回溯。

试题链接:

http://www.lryc.cn/news/224974.html

相关文章:

  • 读取W25Q64的设备ID时输出0xff
  • 【Docker】Docker 网络
  • Flutter学习:使用CustomPaint绘制路径
  • 软件模拟SPI协议的理解和使用编写W25Q64
  • SQLI手动注入和python sqlmap代码注入
  • MemcachedRedis构建缓存服务器 (数据持久化,主从同步,哨兵模式)
  • Python语法基础(变量 注释 数据类型 输入与输出 运算符 缩进)
  • linux espeak语音tts;pyttsx3 ubuntu使用
  • 小白该如何学习Linux操作系统?
  • 2023双十一:实体门店闯入,第二战场全面开战
  • 操作系统·处理机调度死锁
  • SQL第四次上机实验
  • 读书笔记:彼得·德鲁克《认识管理》第11章 若干例外及经验教训
  • JVM-虚拟机的故障处理与调优案例分析
  • JMeter 相关的面试题
  • 你在React项目中是如何使用Redux的? 项目结构是如何划分的?
  • [每周一更]-(第71期):DevOps 是什么?
  • k8s的安装部署,详细过程展示(保姆级安装教程)
  • 基于windows、GDAL2.2.3版本和Java集成安装和使用GDAL库的方法
  • AlphaControls控件TsRadioGroup的使用
  • 安卓常见设计模式8------享元模式(Kotlin版)
  • day54 django中orm数据库增删改查
  • 【js逆向实战】某sakura动漫视频逆向
  • L2-015 互评成绩
  • 【Docker安装RockeMQ:基于Windows宿主机,并重点解决docker rocketMQ安装情况下控制台无法访问的问题】
  • Android Studio——android项目运行main()函数
  • 移动医疗科技:开发互联网医院系统源码
  • 代码审计, 介绍, 思路总结
  • 2023NOIP A层联测27 总结
  • 2022最新版-李宏毅机器学习深度学习课程-P34 自注意力机制类别总结