典型回溯题目 - 全排列(一、二)

news2025/1/23 3:53:22

典型回溯题目 - 全排列(一、二)

46. 全排列

题目链接:46. 全排列状
题目大意:
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

注意:(1)1 <= nums.length <= 6;(2)-10 <= nums[i] <= 10;(3)nums 中的所有整数 互不相同

提示:LC的灵佬的视频题解非常好,下面的图片截取自对应视频。
在这里插入图片描述

示例:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

输入:nums = [0,1]
输出:[[0,1],[1,0]]

输入:nums = [1]
输出:[[1]]

参考代码:

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:

        # return list(set(itertools.permutations(nums, len(nums))))

        def dfs(i):
            if i==n:
                ans.append(path.copy())
                return 
            for j in range(n):
                if not on_path[j]:
                    path[i] = nums[j]
                    on_path[j] = True
                    dfs(i+1)
                    on_path[j] = False

        n = len(nums)
        ans = []
        path = [0]*n
        on_path = [False]*n
        dfs(0)
        return ans
  • 时间复杂度: O ( n × n ! ) O(n \times n!) O(n×n!),其中 n 为数组 nums 的长度,该推论可见灵佬的视频。
  • 空间复杂度: O ( n ) O(n) O(n)

47. 全排列 II

题目链接:47. 全排列 II
题目大意:
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

注意:(1)1 <= nums.length <= 8;(2)-10 <= nums[i] <= 10。

提示:在全排列的基础上进行条件束缚,进行去重操作。

示例:

输入:nums = [1,1,2]
输出:
[[1,1,2],
 [1,2,1],
 [2,1,1]]

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

参考代码:

class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        # return list(set(itertools.permutations(nums, len(nums))))

        nums.sort()  
        def dfs(i):
            if i==n:
                ans.append(path.copy())
                return 
            for j in range(n):
                if not on_path[j]:
                    if j>0 and nums[j]==nums[j-1] and not on_path[j-1]:
                        continue
                    path[i] = nums[j]
                    on_path[j] = True
                    dfs(i+1)
                    on_path[j] = False

        n = len(nums)
        ans = []
        path = [0]*n
        on_path = [False]*n
        dfs(0)
        return ans
  • 时间复杂度: O ( n × n ! ) O(n \times n!) O(n×n!),其中 n 为数组 nums 的长度。
  • 空间复杂度: O ( n ) O(n) O(n)

小结

这两道题是非常经典的回溯问题,很值得反复学习记忆。

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

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

相关文章

Linux命令·which·whereis·locate·find

我们经常在linux要查找某个文件&#xff0c;但不知道放在哪里了&#xff0c;可以使用下面的一些命令来搜索&#xff1a; which 查看可执行文件的位置。whereis 查看文件的位置。 locate 配合数据库查看文件位置。find 实际搜寻硬盘查询文件名称。whichwhich命令的作用是&#x…

DJ1-1 操作系统引论

目录 一、操作系统的概念 二、操作系统的目标 三、操作系统的作用 一、操作系统的概念 定义一 操作系统是一组控制和管理计算机软硬件资源、合理地对各类作业进行调度以及方便用户使用的程序集合。 定义二 操作系统是位于硬件层&#xff08;HAL&#xff09;之上&#xff…

SQL 基础函数,通配符,BETWEEN ,用法复习

使用 SQL _ 通配符 下面的 SQL 语句选取 name 以一个任意字符开始&#xff0c;然后是 “oogle” 的所有客户&#xff1a; SELECT * FROM Websites WHERE name LIKE _oogle;下面的 SQL 语句选取 name 以 “G” 开始&#xff0c;然后是一个任意字符&#xff0c;然后是 “o”&am…

看完这篇我不信你不会二叉树的层序遍历【C语言】

目录 实现思路 代码实现 之前介绍了二叉树的前、中、后序三种遍历&#xff0c;采用的是递归的方式。今天我们来学习另外一种遍历方式——层序遍历。层序遍历不容小觑&#xff0c;虽然实现方法并不难&#xff0c;但是它所采取的思路是很值得学习的&#xff0c;与前三者不同&am…

学习笔记-架构的演进之容器的封装-3月day06

文章目录前言封装应用的Dockerwhy Docker not LXC?附前言 当文件系统、访问、资源都可以被隔离后&#xff0c;容器就已经具备它降生所需要的全部前置支撑条件了。为了降低普通用户综合使用 namespaces、cgroups 这些低级特性的门槛&#xff0c;2008 年 Linux Kernel 2.6.24 内…

Java中的final和权限修饰符

目录 final 常量 细节&#xff1a; 权限修饰符 Java权限修饰符用于控制类、方法、变量的访问范围。Java中有四种权限修饰符&#xff1a; 权限修饰符的使用场景&#xff1a; final 方法 表明该方法是最终方法&#xff0c;不能被重写。类 表明该类是最终类&#xff0c;不能被继…

Jetpack太香了,让开发效率提升了不少

作者&#xff1a;Jingle_zhang 第三方App使用Jetpack等开源框架非常流行&#xff0c;在Gradle文件简单指定即可。然而ROM内置的系统App在源码环境下进行开发&#xff0c;与第三方App脱节严重&#xff0c;采用开源框架的情况并不常见。但如果系统App也集成了Jetpack或第三方框架…

【UE4 RTS游戏】04-摄像机运动_鼠标移动到视口边缘时移动Pawn

效果可以看到当鼠标移动到视口边缘时&#xff0c;Pawn就会向这个方向移动。步骤打开项目设置&#xff0c;添加两个操作映射打开“CameraPawnController”&#xff0c;在事件图表中添加两个浮点型变量&#xff0c;一个为公有一个为私有。分别命名为“ZoomSensitivity”、“MaxAr…

【Linux】帮助文档查看方法

目录1 Linux帮助文档查看方法1.1 man1.2 内建命令(help)1 Linux帮助文档查看方法 1.1 man man 是 Linux 提供的一个手册&#xff0c;包含了绝大部分的命令、函数使用说明。 该手册分成很多章节&#xff08;section&#xff09;&#xff0c;使用 man 时可以指定不同的章节来浏…

ubuntu 系统安装docker——使用docker打包python项目,整个流程介绍

目录 1 安装docker和配置镜像源 2 下载基础镜像 3 通过镜像创建容器 4 制作项目所需的容器 5 容器制作好后打包为镜像 6 镜像备份为.tar文件 7 从其他服务器上恢复镜像 8 docker的其他常用指令 首先科普一下镜像、容器和实例&#xff1b; 镜像&#xff1a;相当于安装包&…

怎么用消息队列实现分布式事务?

当消息队列和事务联系在一起时&#xff0c;它指的是消息生产者和消息消费者之间如何保持数据一致性。 什么是分布式事务&#xff1f; 事务是指当我们进行若干项数据更新操作时&#xff0c;为了保证数据的完整性和一致性&#xff0c;我们希望这些更新操作要么都成功&#xff0…

蓝桥杯三月刷题 第五天

文章目录&#x1f4a5;前言&#x1f609;解题报告&#x1f4a5;数的分解&#x1f914;一、思路:&#x1f60e;二、代码&#xff1a;&#x1f4a5;前言 上午没写&#xff0c;下午写了会被朋友拉出去耍&#xff0c;被冷风吹到了&#xff0c;而且被他坑了&#xff0c;根本没有玩骑…

【源码库】在调用 createApp 时,Vue 为我们做了那些工作?

在使用Vue3时&#xff0c;我们需要使用createApp来创建一个应用实例&#xff0c;然后使用mount方法将应用挂载到某个DOM节点上。 那么在调用createApp时&#xff0c;Vue再背后做了些什么事情呢&#xff1f;今天就来扒一扒Vue3的源码&#xff0c;看看调用createApp发生了些什么…

八股文系列:Java虚拟机(JVM)

说一下 JVM 的主要组成部分及其作用&#xff1f; JVM包含两个子系统和两个组件&#xff0c;两个子系统为Class loader(类装载)、 Execution engine(执行引擎)&#xff1b;两个组件为Runtime data area(运行时数据 区)、Native Interface(本地接口)。 Class loader(类装载)&…

IDEA插件开发入门.02

前言许久没更新IDEA插件开发系列了。最近刚好在汇总日常开发中常见的代码“异味”&#xff0c;共享文档复制黏贴略显麻烦&#xff0c;所以想着是否可以搞一个IDEA插件来帮忙收集常见代码&#xff0c;毕竟IDEA作为后端程序员必备的开发工具&#xff0c;显然会方便很多。于是&…

【JavaEE初阶】第四节.文件操作 和 IO (上篇)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、文件 1.1 文件的概念 1.2 文件的路径二、 Java中文件系统操作 2.1 File类的属性 2.2 File类的构造方法 2.3 File类的方法 …

ArangoDB

介绍 ArangoDB 是一个原生的多模型开源数据库&#xff0c;具有灵活的文档、图形和键值数据模型。使用方便的类似 SQL 的查询语言或 JavaScript 扩展构建高性能应用程序。主要特点 在集群上安装 ArangoDB —— 安装简单灵活的数据建模&#xff1a;数据建模为键值对、文档或图表的…

企业信息化,电商商品详情API接口,数据返回值说明,商品详情,关键词搜索,价格监控,卖家买家订单等相关数据

都在说API&#xff0c;API到底是什么&#xff1f; 对于很多非IT人士而言&#xff0c;API ≈ 听不懂。 其实日常生活中&#xff0c;我们有很多类似API的场景&#xff0c;比如&#xff1a; 电脑需要调用手机里面的信息&#xff0c;这时候你会拿一根数据线将电脑手机连接起来&a…

[Tomcat]解决IDEA中的Tomcat中文乱码问题

目录 1、IDEA 2、VM options 3、IDEA启动程序的存放目录 4、Tomcat 写在前面&#xff1a;此方法亲测有效&#xff01;&#xff01;&#xff01; 1、IDEA 2、VM options 加上这两行&#xff1a; -Dfile.encodingUTF-8 -Dconsole.encodingUTF-8 3、IDEA启动程序的存放目录…

置信椭圆(误差椭圆)详解

文章目录Part.I 预备知识Chap.I 一些概念Chap.II 主成分分析Chap.III Matlab 函数 randnChap.IV Matlab 函数 pcaPart.II 置信椭圆的含义Chap.I 一个 Matlab 实例Sec.I 两个不相关变量的特征Sec.II 两个相关变量的特征Chap.II 变换阵 (解相关矩阵) 的求解ReferencePart.I 预备知…