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

dfs回溯 -- Leetcode46. 全排列

题目链接: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 中的所有整数 互不相同

 解题思路

本题是最典型的回溯法实现。使用深度优先遍历,每一次“碰壁”后才回头(即遍历到最后一个才回溯)。

class Solution {public List<List<Integer>> permute(int[] nums) {List<List<Integer>> res = new ArrayList<>();// 用于标记是否使用过boolean[] used = new boolean[nums.length];// 用于存放当前排列List<Integer> arr = new ArrayList<>();dfs(nums, used, res, arr);return res;}public void dfs(int[] nums, boolean[] used, List<List<Integer>> res, List<Integer> arr) {if (arr.size() == nums.length) {res.add(new ArrayList<>(arr));return;}for (int i = 0; i < nums.length; i++) {// 如果没有使用过if (!used[i]) {used[i] = true;arr.add(nums[i]);// 递归dfs(nums, used, res, arr);used[i] = false;// 回溯arr.remove(arr.size() - 1);}}}
}

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

相关文章:

  • 设计模式-接口隔离原则
  • BD202311夏日漫步(最少步数,BFS或者 Dijstra)
  • React - 你知道props和state之间深层次的区别吗
  • mysql 查询实战-变量方式-解答
  • SpringBoot3配置SpringSecurity6
  • Unity之Unity面试题(三)
  • Linux命令-dos2unix命令(将DOS格式文本文件转换成Unix格式)
  • 企业怎么做数据分析
  • 1111111111
  • [面向对象] 单例模式与工厂模式
  • 《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?
  • 【项目实战经验】DataKit迁移MySQL到openGauss(下)
  • AI预测体彩排3第2弹【2024年4月13日预测--第1套算法开始计算第2次测试】
  • 【13137】质量管理(一)2024年4月串讲题组一
  • Go语言中工作负载类型对并发的影响
  • 常用的Python内置函数
  • MAC(M1芯片)编译Java项目慢且发热严重问题解决方案
  • 如何循环pandas格式的数据
  • 新零售SaaS架构:客户管理系统架构设计(万字图文总结)
  • Apache Spark
  • CentOS7编译ZLMediaKit并使能WebRTC
  • 【数据交换格式】网络socket编程温度采集智能存储与上报项目技术------JSON、TLV
  • IP地址定位技术在各领域的作用
  • 代码随想录 538. 把二叉搜索树转换为累加树
  • JavaWeb--前端--01HTML和CSS
  • Oracle SQL中的DECODE函数与NVL函数:区别与应用场景详析
  • 算法设计与分析实验报告c++实现(N皇后问题、卫兵布置问题、求解填字游戏问题、图的m着色问题)
  • 深入探索Linux中的libgdbus:GDBus库的应用和实现
  • MacOS下Qt 5开发环境安装与配置
  • jquery 实现倒计时