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

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

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

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] = Truedfs(i+1)on_path[j] = Falsen = len(nums)ans = []path = [0]*non_path = [False]*ndfs(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]:continuepath[i] = nums[j]on_path[j] = Truedfs(i+1)on_path[j] = Falsen = len(nums)ans = []path = [0]*non_path = [False]*ndfs(0)return ans
  • 时间复杂度:O(n×n!)O(n \times n!)O(n×n!),其中 n 为数组 nums 的长度。
  • 空间复杂度:O(n)O(n)O(n)

小结

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

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

相关文章:

  • 数据清洗和特征选择
  • java StringBuilder 和 StringBuffer 万字详解(深度讲解)
  • 【Linux】帮助文档查看方法
  • UEFI 实战(2) HelloWorld 之一 helloworld及.inf文件
  • 向2022年度商界木兰上榜女性致敬!
  • ChatGPT助力校招----面试问题分享(二)
  • JAVA架构与开发(JAVA架构是需要考虑的几个问题)
  • vue 中 v-for 的使用
  • 项目--基于RTSP协议的简易服务器开发(2)
  • ubus编译_环境搭建
  • 移动通信(16)信号检测
  • 数据结构与算法之《顺序表》
  • MySQL索引15连问,抗住!
  • 【服务器管理】手动部署LNMP环境(CentOS 8)(非阿里云版本)
  • 论文笔记:Positive-incentive Noise
  • 340秒语音芯片,轻松实现语音交互,畅享智能生活WTV380语音ic方案
  • 有java基础学习大数据该如何规划
  • 【Java基础】HashMap的底层数据结构是怎样的?
  • MongoDB5副本集高可用集群部署
  • 【Java】最新版本SpringCloudStream整合RocketMQ实现单项目中事件的发布与监听
  • abp.net 5.0 部署IIS10
  • Windows安装Qt与VS2019添加QT插件
  • 自学大数据第5天~hadoop集群搭建(二)
  • MySQL (六)------MySQL的常用函数、 事务(TCL)、DCL用户操作语句、常见环境、编码问题
  • 【3.8】操作系统内存管理、Redis数据结构、哈希表
  • Shell编程:轻松掌握入门级Shell脚本,成为Shell高手
  • FastApi的搭建与测试
  • C++基础——C++面向对象之重载与多态基础总结(函数重载、运算符重载、多态的使用)
  • 调用一个函数时发生了什么?
  • MindAR的网页端WebAR图片识别功能的图片目标编译器中文离线版本功能(含源码)