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

[Java恶补day51] 46. 全排列

给定一个不含重复数字的数组 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 中的所有整数 互不相同


知识点:
回溯、数组


解:
核心思路:
数组记录节点是否被访问过
集合记录已访问的节点
每次遍历时,选择一个未被访问的节点进行访问
恢复现场的目的:假设当前遍历节点3,但结果不满足,需要回溯到上一个节点,若不恢复现场,节点3将不能再访问了

时间复杂度:O(n∗n!)O(n*n!)O(nn!)。从根节点到叶子节点的路径长度之和,共有n!个节点
空间复杂度:O(n)O(n)O(n)

class Solution {public List<List<Integer>> permute(int[] nums) {//获取数组大小int len = nums.length;//存储结果List<List<Integer>> res = new ArrayList<>();//路径List<Integer> path = Arrays.asList(new Integer[len]); // 所有排列的长度都是len//是否遍历过boolean[] isUsed = new boolean[len];//执行DFSdfs(0, nums, len, res, path, isUsed);return res;}private void dfs(int depth, int[] nums, int len, List<List<Integer>> res, List<Integer> path, boolean[] isUsed) {//叶子节点if (depth == len) {res.add(new ArrayList<>(path));return;}//遍历所有节点for (int i = 0; i < len; i++) {//未访问过if (!isUsed[i]) {//从未选过的数字中选一个path.set(depth, nums[i]);//标记为已访问isUsed[i] = true;//递归下一个节点dfs(depth + 1, nums, len, res, path, isUsed);//恢复现场isUsed[i] = false;//路径无需恢复现场,因为排列长度固定,直接覆盖即可}}}
}

参考:
1、灵神题解

http://www.xdnf.cn/news/18684.html

相关文章:

  • 无人机芯片休眠模式解析
  • 关于传统的JavaWeb(Servlet+Mybatis)项目部署Tomcat后的跨域问题解决方案
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(19):文法复习+单词第7回1
  • 基于知识图谱的装备健康智能维护系统KGPHMAgent
  • C++ #pragma
  • 少儿舞蹈小程序需求规格说明书
  • 【Hot100】二分查找
  • Fluent Bit系列:字符集转码测试(上)
  • 使用 Prometheus 监控服务器节点:Node Exporter 详解与配置
  • 实时监测蒸汽疏水阀的工作状态的物联网实时监控平台技术解析
  • 容器学习day02
  • 基于 OpenCV 与 Mediapipe 的二头肌弯举追踪器构建指南:从环境搭建到实时计数的完整实现
  • 力扣498 对角线遍历
  • 4G模块 EC200通过MQTT协议连接到阿里云
  • (LeetCode 每日一题) 498. 对角线遍历 (矩阵、模拟)
  • 撤回git 提交
  • 【龙泽科技】汽车车身测量与校正仿真教学软件【赛欧+SHARK】
  • 什么是共模抑制比?
  • 三坐标如何实现测量稳定性的提升
  • RustFS在金融行业的具体落地案例中,是如何平衡性能与合规性要求的?
  • WRC2025 | 澳鹏亮相2025世界机器人大会,以数据之力赋能具身智能新纪元
  • 大数据毕业设计选题推荐-基于大数据的餐饮服务许可证数据可视化分析系统-Spark-Hadoop-Bigdata
  • LevelDB SSTable模块
  • Consul 在 Windows 上的启动方法
  • 【ACP】2025-最新-疑难题解析-6
  • pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试
  • 消息中间件RabbitMQ03:结合WebAPI实现点对点(P2P)推送和发布-订阅推送的Demo
  • 软考中级网络工程师通关指南:从学习到实战
  • 04-Maven工具介绍
  • 从0开始学习Java+AI知识点总结-25.web实战(AOP)