当前位置: 首页 > 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).总结

  • 正确的排列回溯。

试题链接:

相关文章:

  • Unity 获取对象的方法
  • 饥饿加载与懒加载的区别
  • 【力扣:1504】统计全1子矩阵
  • 物奇平台耳机复位功能实现
  • 简述 HTTP 请求的过程是什么?
  • 哪款手机便签软件支持存储录音文件并支持转文字?
  • 快速搭建PHP管理后台
  • ipad可能会在iOS 16中失去智能家居中心功能
  • 学习c#的第三天
  • 快速搭建开源分布式任务调度系统DolphinScheduler并远程访问
  • 开发知识点-NodeJs-npm/Pnpm/Vite/Yarn包管理器
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • SQLI手动注入和python sqlmap代码注入
  • 大数据毕业设计选题推荐-超级英雄运营数据监控平台-Hadoop-Spark-Hive
  • 使用【Python+Appium】实现自动化测试
  • 「面试题」如何实现一个圣杯布局?
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 07.Android之多媒体问题
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • css的样式优先级
  • dva中组件的懒加载
  • IDEA 插件开发入门教程
  • Java-详解HashMap
  • js ES6 求数组的交集,并集,还有差集
  • k个最大的数及变种小结
  • Laravel5.4 Queues队列学习
  • npx命令介绍
  • Python十分钟制作属于你自己的个性logo
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • ViewService——一种保证客户端与服务端同步的方法
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vuex 学习笔记 01
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Web设计流程优化:网页效果图设计新思路
  • 包装类对象
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 服务器从安装到部署全过程(二)
  • 经典排序算法及其 Java 实现
  • 类orAPI - 收藏集 - 掘金
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 设计模式走一遍---观察者模式
  • 什么软件可以剪辑音乐?
  • 使用putty远程连接linux
  • 学习Vue.js的五个小例子
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​Java并发新构件之Exchanger
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​人工智能书单(数学基础篇)
  • ​一些不规范的GTID使用场景
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #图像处理
  • (02)Hive SQL编译成MapReduce任务的过程