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

LeetCode-46. 全排列

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、代码:

#include <algorithm>
#include <vector>
using namespace std;class Solution
{
public:vector<vector<int>> permute(vector<int>& nums){vector<vector<int>> result;backtrack(nums, 0, result);return result;}void backtrack(vector<int>& nums, int start, vector<vector<int>>& result){if (start == nums.size()) {// 找到一个排列,加入结果result.push_back(nums);return;}for (int i = start; i < nums.size(); ++i) {swap(nums[start], nums[i]);backtrack(nums, start + 1, result);swap(nums[start], nums[i]);}}
};

3、解题思路:

全排列问题要求生成所有可能的元素排列。回溯法是一种有效的解决方法,其核心思想是通过递归和回溯来探索所有可能的路径。具体步骤如下:

  1. ​选择路径​​:从第一个位置开始,依次将每个位置的元素与当前位置交换,固定当前元素。
  2. ​递归探索​​:对剩余未固定的元素递归执行相同操作,直到所有元素都被固定。
  3. ​回溯恢复​​:递归返回后,撤销之前的交换操作,恢复原状,以便进行下一次选择。

4、代码解释

  • ​主函数 permute​:初始化结果容器并调用回溯函数。
  • ​回溯函数 backtrack​:
    • ​终止条件​​:当 start 等于数组长度时,表示所有元素已固定,当前数组为一个排列,加入结果。
    • ​循环遍历​​:从 start 开始,将每个元素交换到当前位置。
    • ​递归调用​​:处理下一个位置,即 start + 1
    • ​回溯恢复​​:撤销交换操作,确保后续循环的正确性。

相关文章:

  • 1、AI及LLM基础:OpenAI 开发
  • NoSql文档型数据库——Mongodb
  • Apache中间件解析漏洞与安全加固
  • Python流程控制
  • FANUC机器人GI与GO位置数据传输设置
  • 初识Redis · 事务
  • 项目组合管理PPM
  • 5.4.云原生与服务网格
  • uniapp返回上一页接口数据更新了,页面未更新
  • Lua 第9部分 闭包
  • 官方不存在tomcat10-maven-plugin插件
  • Linux内核源码结构
  • ApacheJmeter使用权威指南
  • Maven 工程中的pom.xml 文件(图文)
  • Python3(6) 运算符
  • 【解读】Chrome 浏览器实验性功能全景
  • Windows:注册表配置应用
  • STM32F103 “BluePill” 上的 DMA 原理与实践
  • Javase 基础入门 —— 03 面向对象编程
  • 欧拉环境(openEuler 22.03 LTS SP3)安装移动磐维数据库(PanWeiDB_V2.0-S2.0.2_B01)步骤
  • 商标乱象调查:“120W”充电器功率仅12W,120W为商标名
  • 世界地球日丨上海交响乐团牵手上海植物园,为“树”写交响曲
  • 浙江一季度GDP为22300亿元,同比增长6.0%
  • 世界史圆桌|16-18世纪的跨太平洋贸易
  • 深一度|中国花样滑冰因何大滑坡
  • “我们一直都是面向全世界做生意”,“世界超市”义乌一线走访见闻