LeetCode [中等]全排列(回溯算法)

news2025/6/10 3:42:22

46. 全排列 - 力扣(LeetCode)

回溯法

采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:

  • 找到一个可能存在的正确的答案;
  • 在尝试了所有可能的分步方法后宣告该问题没有答案。

思路

用 n 表示数组 nums 的长度。创建列表 temp 用于存储当前排列,将数组 nums中的每个元素依次加入 temp,然后根据 temp 生成全排列。

为了得到数组 nums 的全排列,需要依次确定排列中的每个位置的元素,可以通过交换 temp 中的元素实现。对于 0≤ index <n,按照下标 index 从小到大的顺序依次确定每个 temp[index] 的值,即可得到一个排列。

  1. 当 index = 0 时,可以将 temp[0]和任意一个元素交换(包括和自身交换),经过一次交换之后即可确定当前排列中 temp[0]的值。
  2. 当 index>0 时,如果当前排列中 temp[0] 到 temp[index−1] 的值都已经确定,则可以将 temp[index]和尚未确定的任意一个元素交换(包括和自身交换),经过一次交换之后即可确定当前排列中 temp[index]的值。

由于当 index = 0 时,排列中的所有元素都尚未确定,因此对于任意 0≤ index < n,都可以将 temp[index] 和任意一个下标大于等于 index 的元素交换,经过一次交换之后即可确定当前排列中 temp[index] 的值。

使用回溯得到全排列。用 index 表示当前下标,初始时 index = 0,具体做法如下。

如果 index = n,则当前排列中的所有元素都已经确定,将当前排列添加到结果列表中。

如果 index< n ,则对于每个 index≤ i < n,执行如下操作。

  1. 将 temp[index] 和 temp[i] 的值交换,然后将 index+1 作为当前下标继续搜索。
  2. 将 temp[index]和 temp[i]的值再次交换,恢复到交换之前的状态。

当每个下标对应的所有可能的值都遍历结束时,即可得到数组 nums 的全排列。

代码实现

public class Solution {
    IList<IList<int>> permutations = new List<IList<int>>();
    IList<int> temp = new List<int>();
    int n;

    public IList<IList<int>> Permute(int[] nums) {
        foreach(int num in nums)
        {
            temp.Add(num);
        }
        n = nums.Length;
        Backtrack(0);
        return permutations;
    }

    public void Backtrack(int index)
    {
        if(index == n)
            permutations.Add(new List<int>(temp));
        else
        {
            for(int i = index; i < n; i++)
            {
                Swap(temp, index, i);
                Backtrack(index + 1);
                Swap(temp, index, i);
            }
        }
    }
    public void Swap(IList<int> temp, int index1, int index2)
    {
        int curr = temp[index1];
        temp[index1] = temp[index2];
        temp[index2] = curr;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1285545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt应用开发(Quick篇)——布局类与布局模块

一、前言 实际 应用中&#xff0c;布局是常用的功能&#xff0c;布局最直观的就是提供空间使用率&#xff0c;改善空间的流动和模块之间的重叠&#xff0c;让界面更加的美观。 二、布局类Layout 2.1 介绍 将Layout类型的对象附加到布局的子元素上&#xff0c;提供有关该项的特…

有趣的代码——有故事背景的程序设计2

有趣的代码是很多的&#xff0c;所以接着上一篇&#xff0c;这一篇再和大家分享一些有故事背景的程序设计。 目录 1.百元买百鸡问题 2.哥德巴赫猜想 3.折半查找 4.主对角线元素之和 5.戈尼斯堡七桥问题 1.百元买百鸡问题 已知公鸡5元一只&#xff0c;母鸡3元一只&#xf…

【代码随想录刷题】Day20 二叉树06

文章目录 1.【654】最大二叉树1.1 题目描述1.2 解题思路1.3 java代码实现1.4 总结 2.【617】合并二叉树2.1 题目描述2.2 解题思路2.3 java代码实现 3.【700】二叉搜索树中的搜索3.1 题目描述3.2 解题思路3.3 java代码实现 4.【98】验证二叉搜索树4.1 题目描述4.2 解题思路4.3 j…

Hadoop学习笔记(HDP)-Part.02 核心组件原理

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

Python代码编译并生成Docker镜像

Python代码编译并生成Docker镜像 前言 实际python项目交付时往往有针对关键代码进行保护的需求&#xff0c;本文介绍了一种简单可行的方案&#xff1a;1. 在Linux系统上先将 .py 文件编译为 .so 文件&#xff0c;2. 将整个项目打包成Docker镜像&#xff08;解决 .so 文件的环…

Mars3d支持geoserver的rest服务类型数据渲染上图

需求&#xff1a;geoserver的rest服务类型的矢量数据通过mars3d的引擎直接渲染上图 学习过程&#xff1a; 1.通过全局查询示例的map.js文件&#xff0c;可以看到示例调用的rest服务类型&#xff0c;发现很多wfs接口的数据直接上图渲染矢量数据以及query接口下面调用这个服务的…

python-单词本|通讯录

编写程序&#xff0c;生词本。 def sayHello():print("" * 20 \n 欢迎使用生词本\n 1.查看生词本\n 2.背单词\n 3.添加新单词\n 4.删除单词\n 5.清空生词本\n 6.退出生词本\n * 20 \n)def addW(data):word input("请输入新单词&#xff1a;")trans i…

成为Java开发高手:掌握Spring框架的关键技能-DI

DI相关内容 1.1 setter注入1.1.2 注入引用数据类型1.1.3 注入简单数据类型步骤1:声明属性并提供setter方法步骤2:配置文件中进行注入配置步骤3:运行程序 1.2 构造器注入1.2.2 构造器注入引用数据类型步骤1:删除setter方法并提供构造方法步骤2:配置文件中进行配置构造方式注入步…

docker搭建xxl-job

使用docker-compose创建并运行xxl-job 查看、下载镜像 docker search xxl-job # 结果&#xff0c;自己指定版本 xuxueli/xxl-job-admin:2.3.1创建文件夹 /usr/local/software/xxl-job/logs编排docker-compose文件 version: 2 networks:wn_docker_net:external: true servic…

阿里云服务器租赁价格表,预算100元到5000元可选配置

阿里云服务器租用费用&#xff0c;阿里云轻量应用服务器2核2G3M带宽轻量服务器一年87元&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;ECS云服务器e系列2核2G配置3M固定带宽99元一年、2核4G配置365元一年、2核8G配置522元一年&#xff0c;阿里云u1服务器2核4G、…

Hadoop学习笔记(HDP)-Part.10 创建集群

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

如何通过DB操作地理空间数据

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、PostgreSQL PostgreSQL是一个强大的对象关系数据库管理系统&#xff08;ORDBMS&#xff09;。它是在BSD风格的许可下发布的&#xff0c;因此是自…

2023年【危险化学品经营单位安全管理人员】免费试题及危险化学品经营单位安全管理人员复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员免费试题是安全生产模拟考试一点通生成的&#xff0c;危险化学品经营单位安全管理人员证模拟考试题库是根据危险化学品经营单位安全管理人员最新版教材汇编出危险化学品经营单位安全管…

07、pytest指定要运行哪些用例

官方用例 # 目录结构 | |----test_mod.py | |----testing||----test_dir.py# content of test_mod.py import pytestdef func(x):return x 1def test_mod():print("test_mod function was invoked")assert func(3) 5def test_func():print("test_func was in…

Cyanine7-NHS ester荧光染料的化学结构、光谱性质和荧光特性

Cyanine7-NHS ester的结构包括一个靛菁环结构和一个NHS ester活性基团。NHS ester官能团是一种活化基团&#xff0c;用于将染料共价结合到含有游离氨基官能团的生物分子上。 **光谱性质&#xff1a;**Cyanine7-NHS ester的光谱性质通常包括&#xff1a; **激发波长&#xff08…

Hadoop学习笔记(HDP)-Part.16 安装HBase

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

大佬齐聚首钢园,会碰撞出什么火花-百度APOLLO线下沙龙

陈老老老板&#x1f9d9;‍♂️ &#x1f46e;‍♂️本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09; &#x1f934;本文简述&#xff1a;生活就像海洋,只有意志坚强的人,才能到达彼岸 &#x1f473;‍♂️上一篇文章&#xff1a; 年度总结-你觉…

PyQt6 QTabWidget选项卡控件

​锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计37条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话…

11月,各地政府办公厅、市监局、不动产登记中心、财政厅持续深化电子签应用

本月&#xff0c;各地政府办公厅、市监局、不动产登记中心、财政厅、发改委、住建委、药品监管局等机关部门&#xff0c;持续推动电子印章、电子合同等功能在“政府采购、食品经营备案、不动产登记证书和证明、电子保函、工程项目招投标、实验室优化重组申报等”众多领域深化应…

C++入门第十一篇----多态

前言&#xff1a; 和前面的继承一样&#xff0c;多态也是对类和对象的功能进行扩展&#xff0c;以让其更加好用的一个知识点&#xff0c;接下来&#xff0c;就让我们总结一下多态&#xff0c;这个依托了继承的一个重要知识点。 对多态的理解和多态的概念&#xff1a; 何为多…