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

力扣47:全排列Ⅱ

力扣47:全排列Ⅱ

  • 题目
  • 思路
  • 代码

题目

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

思路

又是任意顺序和所有不重复的排列,显而易见我们要使用回溯的办法。
首先是回溯的结束条件即新数组的长度等于nums的长度。这道题的难点主要是如何判断当前位置已经被使用过以及当前位置是否是重复的也就是是否已经插入过了。之前的全排列Ⅰ我们使用的是bool类型的数组来判断当前位置是否被使用了,这道题同样可以使用这种方法不过想要使用这种方法我们每次都需要从头开始遍历这个bool数组从而得到一个值为false的位置。所以这次我们换一个方式我们使用过这个位置代表着什么,代表着这个位置被固定了因为他已经插入到临时数组里了它最后是要被插入到答案里的。所以我们可以定义一个变量number,这个变量代表的意思是这是第几位数字,每当我们使用过一个位置后我们就把当前位置的值和number位置的值进行交换,这样做还有一个好处就是我们不需要定义临时数组了我们直接在nums上进行交换最后长度即number等于nums的长度后直接插入nums即可。
其次就是如何解决剪枝的问题,这个问题也好解决我们在每次进入回溯函数的时候定义一个哈希表即set,在每次进入遇到一个位置时先判断它的值在set中是否能找到能找到说明它不能被固定了直接跳过到下一个位置,找不到就将该位置的值插入到set中。

代码

class Solution {
public:// 回溯void totalSort(vector<int>& nums, vector<vector<int>>& res, int number) {// 如果当前位置等于长度就直接插入if (number == nums.size()) {res.push_back(nums);return;}set<int> s;for (int i = number; i < nums.size(); i++) {// 剪枝// 如果在set中存在就说明是重复元素会导致答案重复if (s.find(nums[i]) != s.end()) {continue;}s.insert(nums[i]);// 固定使用过的值到number位置上swap(nums[i], nums[number]);totalSort(nums, res, number + 1);swap(nums[i], nums[number]);}}vector<vector<int>> permuteUnique(vector<int>& nums) {vector<vector<int>> res;totalSort(nums, res, 0);return res;}
};
http://www.lryc.cn/news/618884.html

相关文章:

  • ffmpeg,ffplay, vlc,rtsp-simple-server,推拉流命令使用方法,及测试(二)
  • Linux内核编译ARM架构 linux-6.16
  • 深度贴:前端网络基础及进阶(3)
  • archlinux中VLC无法播放视频的解决办法
  • Linux TC流控实现机制
  • MySQL——MySQL引擎层BufferPool工作过程原理
  • leetcode3258:统计满足K约束的子字符串数量Ⅰ(变长滑动窗口详解)
  • Tricentis Tosca 2025.1 LTS 系统要求
  • Java 中 Set 接口详解:知识点与注意事项
  • Day50--图论--98. 所有可达路径(卡码网),797. 所有可能的路径
  • Javase 之 字符串String类
  • Python 多进程及进程间通信
  • C++实现LINGO模型处理程序
  • 杰里常用功能API
  • Navicat更改MySql表名后IDEA项目启动会找原来的表
  • 腾讯codebuddy.ai 安装实测【从零开始开发在线五子棋游戏:完整开发记录】
  • 服务降级方式
  • 2025年最新原创多目标算法:多目标酶作用优化算法(MOEAO)求解MaF1-MaF15及工程应用---盘式制动器设计,提供完整MATLAB代码
  • 拖动式看板工具TOP6:2025最新评测
  • 疯狂星期四文案网第37天运营日记
  • 看懂 Makefile 第一课:基础
  • 企业培训笔记:宠物信息管理--实现宠物信息的添加
  • c#,vb.net全局多线程锁,可以在任意模块或类中使用,但尽量用多个锁提高效率
  • 行业分享丨SimSolid 在汽车零部件开发中应用的可行性调研及实践
  • 基于Hadoop的汽车价格预测分析及评论情感分析可视化系统
  • 海信IP108H(53U1M)_S905L-B主控-无线SV6051P/8822CS(通刷咪咕mg100_mg101)线刷固件包
  • grpc浅入门
  • 一键生成 Android 适配不同分辨率尺寸的图片
  • 什么是 Spring MVC?
  • AuthController类讲解