再谈全排列

news2024/12/28 5:08:17

题目链接: . - 力扣(LeetCode)

每次做全排列的题目,我都要孕育好一阵子,到底怎么去思考这个问题呢?

首先,我觉得最好的方式就是画个树。

画了树之后,你就知道,这个问题,是一个循环遍历的问题,但是再遍历的过程中,你需要基于过去的状态(哪些元素被存储了),改变你之后的行为。

此外。我们还需要考虑终止条件,然后,这是一个回溯的问题,那么你需要考虑的就是回溯之后需要怎样的处理。

我们来一一回答这些问题

1. 如果保存过去的状态

我们可以通过一个mask,来记录哪些元素被传入了。

2. 如何设定终止条件

我们可以判断list的长度,如果list的长度和原数组一致,我们就可以保存。

3. backtrack之后的状态重置

我们需要重置两个状态,一个是path中的元素,另一个是遍历到的元素的判断。

class Solution(object):



    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        path = []
        result = []
        
        def backtrack(nums, used):
            if(len(path) == len(nums)):
                result.append(path[:])
                return
            for i,ele in enumerate(nums):
                if(used[i] == False):
                    path.append(ele)
                    used[i] = True            
                    backtrack(nums,used)
                    path.pop()
                    used[i] = False
            return result 

        used = [False] * len(nums)
        result = backtrack(nums, used)
        return result

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

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

相关文章

鸿蒙轻内核M核源码分析系列五 时间管理

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 持续更新中…… 在鸿蒙轻内核源码分析上一篇文章中,我们剖析了中断的源码,简单提到了Tick中断。本文会继续分析Tick和时间相关的源…

多所高校拟撤销地理、测绘、建筑等相关专业!网友:游了很久,发现没有岸!

近日,各大高校频频传来专业“下线”的消息。多所高校拟撤销地理、测绘等相关专业。对此很多网友破防了,表示:还没毕业,专业没了? 更有城乡规划的网友表示:自己已经成为怨种毕业生,游了很久&…

公司数字化转型的目的是什么?

不同行业公司,其数字化转型的目的也不一样。下面我列举几个行业,给大家讲讲其数字化转型的真正目的。 制造数字化转型 制造业来说,数字化转型的本质是通过新一代信息技术与制造技术的融合,实现以数据为核心的资源要素变革、以网络…

【8.28更新】Win10 22H2 正式版:19045.4842镜像下载!

今日系统之家小编给大家带来2024年最新的Windows10 22H2正式版系统,该版本系统基于微软官方Windows 10 22H2 19045.4842 64位 专业版进行离线制作与优化,系统安全无任何病毒残留,且兼容性出色,能完美兼容新老机型。安装后&#xf…

一大波华为“黑”正在赶来

文|琥珀食酒社 作者 | 积溪 不管你信不信 我都敢肯定的告诉你 又一波黑华为的浪潮 将在下周到来 因为下周二 也就是9月10号 华为将发布一款划时代的产品 华为MateXT非凡大师 三折叠屏手机 就我现在得到的情况 这款手机最大的特点 就是先进 余承东都说…

SRT协议分析以及收拉流测试

文章目录 介绍协议概述协议常用URL格式协议工作流程协议包格式数据包和控制包数据包控制包ACKNACK 开源协议栈libSRTFFmpegVLC Media PlayerSRT AllianceSRS 测试使用ffmpegsrs推流端接收端播放端srs配置 使用 libSRT发送端接收端 介绍 SRT(Secure Reliable Transpo…

力扣: 有效的字母异位词

文章目录 需求数组map结尾 需求 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 字母异位词 是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用所有原始字母一次。 示例 1: 输入: s “anagram”, t “nagaram…

9、类和对象

9.1 封装 9.1.1 封装的例子 class Student { public:string name;int age; public:void setName(string name_) {name name_;} }; int main() {Student s1;s1.setName("zhangsan");return 0; }类中的行为都叫做成员,例如成员属性,成员变量&…

磁吸轨道灯的优缺点深度解析:为你的家居照明提供新选择

在现代家居装修中,照明设计已成为提升居住品质的重要一环。磁吸轨道灯作为一种新兴的照明解决方案,以其独特的灵活性和美观性逐渐受到市场的青睐。然而,任何产品都有其两面性,磁吸轨道灯也不例外。本文将深入探讨磁吸轨道灯的优缺…

产品起名|给你的产品插上会飞的翅膀

引言:在品牌的世界里,产品的名字不仅仅是一个标签,它是品牌个性、价值和承诺的直接体现。一个好的产品名能够快速传达产品特性,吸引消费者,并在市场中建立独特的品牌形象。 好产品从起名开始 品牌介绍:南京…

使用卫星仿真软件STK的一些应用和思考(星地链路、星间链路)

目录 任务描述利用STK建模星地协同系统3个GEO高轨卫星240/20/1 Walker-Star Constellation 低轨卫星星座地面站或者地面设备 链路建模与数据提取处理星地链路星间链路数据读取的几种方法最麻烦的方法使用Matlab与STK互联接口使用大规模使用Chain 总结 任务描述 在一个星地协同…

【小设计】基于宏实现的C++ 可复用setter 和getter设计

前言 最近在开发unity游戏的时候,面对庞大复杂的不同类之间进行数据交换和调用,我们必须做好类数据的信息管理,往往我希望暴露给其他类越少越好,这时候我就利用了C#的一个语言特性 public PlayerStateMachine stateMachine{get;…

创建锁对象/函数

描述:某些单据进行修改时,需要锁定数据 方法步骤: 1、se11:可copy创建新锁 EZSDDH 2、输入需要锁定的主表,锁参数会根据主键自动补填 3、激活后,会生成对应的锁函数 ENQUEUE_EZSDDH :锁定表 …

评论的组件封装

主评论的人在数组第一层级,回复的评论都在children里面 【{ name:"张三" idGenerator: 475403892531269 info_Conmment":"今天天气晴朗😀" children:[ { mainIdGenerator:475388950118469 name:"张三" name1&#x…

Java 入门指南:Java 并发编程 —— 并发容器 BlockingDeque、LinkedBlockingDeque

BlockingQueue BlockingQueue 是Java并发包(java.util.concurrent)中提供的一个阻塞队列接口,它继承自 Queue 接口。 BlockingQueue 中的元素采用 FIFO 的原则,支持多线程环境并发访问,提供了阻塞读取和写入的操作&a…

Jenkins构建CI/CD

CI/CD 软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预。 它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少…

多线程 | synchronized的简单使用

synchronized 关键字是 Java 中解决并发问题的一种常用方法,也是最简单的一种方法,其作用有三个: (1)互斥性:确保线程互斥的访问同步代码 (2)可见性:保证共享变量的修改能够及时可见…

UOS系统通过Remmina远程windows系统桌面

windows系统之间可以互相进行远程桌面连接,那么UOS系统是否可以远程到windows系统桌面呢?请见下面的文章。 下载安装Remmina软件 首先我们需要在UOS系统上面找到应用商店,下载并安装一个Remmina软件 windows系统开启允许远程桌面连接 wind…

记录ssl epoll的tcp socket服务端在客户端断开时崩溃的问题

文章目录 当客户端关闭后,Epoll 的 TCP socket 服务端会收到两次断开事件可能有以下原因及解决方法:原因分析解决方法 问题ssl socket服务端代码出错现象第一次尝试修改正确改法附上客户端代码 记录ssl epoll的tcp socket服务端在客户端断开时接收到多次…

聚铭网络入选“2024年南京市工程研究中心”认定名单

为深入实施创新驱动发展战略,因地制宜发展新质生产力充分发挥工程研究中心对推进产业强市的重要支撑作用,根据《南京市工程研究中心管理办法》,南京市发展和改革委员会于2024年5月组织开展了本年度南京市工程研究中心遴选工作。经企业申报、各…