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

LeetCode 46. 全排列

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 中的所有整数 互不相同

解题思路:

递归回溯(Recursion、Backtrack)

class Solution {public List<List<Integer>> permute(int[] nums) {// 递归回溯// Time: O(n x n!)// Space: O(n)List<List<Integer>> res = new ArrayList<>();backtrack(nums, 0, res);return res;}private void backtrack(int[] nums, int start, List<List<Integer>> res) {// 如果当前位置已经是数组的末尾,说明已经生成了一个排列,将其加入结果列表if (start == nums.length) {List<Integer> permutation = new ArrayList<>();for (int num : nums) {permutation.add(num);}res.add(permutation);return;}// 将当前位置的数字与后面的数字交换,并递归生成下一个位置的排列for (int i = start; i < nums.length; i++) {// 交换当前位置的数字与后面的数字swap(nums, start, i);// 递归生成下一个位置的排列backtrack(nums, start + 1, res);// 恢复原始状态,以便进行下一次交换swap(nums, start, i);}}private void swap(int[] nums, int i, int j) {int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
}

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

相关文章:

  • NVMe TCG安全数据存储简介
  • Linux命令-ab命令(Apache服务器的性能测试工具 )
  • 蓝桥杯java基础
  • Unity3d引擎中使用AIGC生成的360全景图(天空盒)
  • React Router v6 改变页面Title
  • postman测试导入文件
  • ZigBee学习(一)
  • Unity—配置lua环境变量+VSCode 搭建 Lua 开发环境
  • 前端-云点播技术
  • k8s---ingress对外服务(traefik)
  • MySQL-SQL-DQL
  • Docker(十四)Etcd 项目
  • EtherNet/IP开发:C++开发CIP源代码
  • 【算法题】68. 文本左右对齐
  • PHP 调用 e 签宝接口签名指南
  • 穿越Flink的时间隧道:解锁实时数据之窗,掌握流处理之巅
  • 服务器与Ajax
  • Electron项目架构方案心得
  • Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)
  • 顶级开源社区开发者体验实践分享
  • STM32之RTC实时时钟
  • Java JVM 堆、栈、方法区详解
  • Oracle篇—分区表和分区索引的介绍和分类(第一篇,总共五篇)
  • Vue中的模式和环境变量
  • 用ChatGPT教学、科研!亚利桑那州立大学与OpenAI合作
  • 问题解决:django模型查询报错,找不到数据库表
  • 持续集成工具Jenkins的使用之安装篇(一)
  • 【JavaScript】面向后端快速学习 笔记
  • 笨蛋学设计模式行为型模式-命令模式【19】
  • windows用msvc编译opencv、opencv-python、opencv_contrib、cuda