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

leetcode代码记录(全排列 II

目录

  • 1. 题目:
  • 2. 我的代码:
  • 小结:

1. 题目:

在这里插入图片描述

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。

示例 1:

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

示例 2:

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

2. 我的代码:

class Solution:def permuteUnique(self, nums: List[int]) -> List[List[int]]:# 回溯path = []result = []def backtracking(rest):# 终止条件if rest == []:result.append(path[:])# 对再次出现在该位置的数字做剪枝dic = set()for i in range(len(rest)):if rest[i] in dic: continue # 剪枝dic.add(rest[i])path.append(rest[i])backtracking(rest[:i] + rest[i + 1:])path.pop()backtracking(nums)return result

这个题继续使用回溯算法,只不过要配合剪枝操作。在每一层定义一个set作为遍历过的元素的记录,如果不在记录中则可以递归,如果在记录中则直接剪枝,continue

为什么要剪枝呢,因为如果相同元素在次位置再递归一次,则会产生和之前递归过的一模一样的分支。继续将遍历完整个列表作为终止条件即可。

以树形结构展示为下图:

在这里插入图片描述

小结:

关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可:

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

相关文章:

  • 【数据结构与算法】之双向链表及其实现!
  • 记一次奇妙的某个edu渗透测试
  • 设计模式学习笔记 - 设计模式与范式 -总结:1.回顾23中设计模式的原理、背后的思想、应用场景等
  • 22 文件系统
  • OVITO-2.9版本
  • 【Java开发指南 | 第一篇】类、对象基础概念及Java特征
  • Neo4j 图形数据库中有哪些构建块?
  • 002 springboot整合mybatis-plus
  • 代码随想录训练营第三十五期|第天16|二叉树part03|104.二叉树的最大深度 ● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • Mac版2024 CleanMyMac X 4.15.2 核心功能详解 cleanmymac这个软件怎么样?cleanmymac到底好不好用?
  • 【华为OD机试】执行任务赚积分【C卷|100分】
  • mybatis分页实现总结
  • Vue3——html-doc-js(html导出为word的js库)
  • 第19天:信息打点-小程序应用解包反编译动态调试抓包静态分析源码架构
  • 外观模式:简化复杂系统的统一接口
  • PHP数组去重
  • 论软件系统的架构风格,使用三段论 写一篇系统架构师论文
  • 深度挖掘响应式模式的潜力,从而精准优化AI与机器学习项目的运行效能,引领技术革新潮流
  • 企业级网络安全:入侵防御实时阻止,守护您的业务安全
  • (一)Java八股——Redis
  • 2024.4.15力扣每日一题——设计哈希映射
  • 数据结构DAY4--哈希表
  • MySQL二阶段和三阶段提交
  • 代码随想录算法训练营第四十二天|01背包问题、416. 分割等和子集
  • JVM主要知识点详解
  • hot100 -- 链表(中)
  • 数据结构面试常见问题
  • 蓝桥杯2024年第十五届省赛真题-R 格式(高精度乘法 + 加法)
  • 普通人做抖音小店真的能赚钱吗?可以,但更取决于个人
  • 基于单链表实现通讯管理系统!(有完整源码!)