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

LeetCode 刷题【47. 全排列 II】

47. 全排列 II

自己做

解1:检查重复

class Solution {
public:void circle(vector<int> nums, vector<vector<int>> &res,int start){int len = nums.size();if(start == len - 1){                       //到头了//检查重复bool is_exist = false;for(int i = 0; i < res.size(); i++){bool same = true;                   //标记是否相同for(int j = 0; j < res[0].size(); j++)if(nums[j] != res[i][j]){          //不相同same = false;break;}if(same){                           //出现了相同is_exist = true;                //标记重复break;}}if(!is_exist)res.push_back(nums);                    //加入结果中return;}for(int i = start; i < len; i++){if(i == start || nums[i] != nums[start]){swap(nums[i], nums[start]);             //交换circle(nums, res, start + 1);           //进入下一层循环swap(nums[i], nums[start]);             //归位}}}vector<vector<int>> permuteUnique(vector<int>& nums) {int len = nums.size();vector<vector<int>> res;circle(nums, res, 0);return res;}
};

看题解

官方代码:

首先通过排序将重复元素全部堆一起

判断条件中

vis[i] 表示该元素是否被取过

i > 0 && nums[i] == nums[i - 1] && !vis[i - 1] 表示该元素是否与上个元素相同,如果相同并且上个元素没取过则取该元素

class Solution {vector<int> vis;public:void backtrack(vector<int>& nums, vector<vector<int>>& ans, int idx, vector<int>& perm) {if (idx == nums.size()) {ans.emplace_back(perm);return;}for (int i = 0; i < (int)nums.size(); ++i) {if (vis[i] || (i > 0 && nums[i] == nums[i - 1] && !vis[i - 1])) {continue;}perm.emplace_back(nums[i]);vis[i] = 1;backtrack(nums, ans, idx + 1, perm);vis[i] = 0;perm.pop_back();}}vector<vector<int>> permuteUnique(vector<int>& nums) {vector<vector<int>> ans;vector<int> perm;vis.resize(nums.size());sort(nums.begin(), nums.end());backtrack(nums, ans, 0, perm);return ans;}
};

http://www.xdnf.cn/news/1333009.html

相关文章:

  • 【Linux系统】匿名管道以及进程池的简单实现
  • 在 React 中,​父子组件之间的通信(传参和传方法)
  • 大语言模型研究进展
  • Elasticsearch 写入全链路:从单机到集群
  • sfc_os!SfcValidateCatalogs函数分析之syssetup.inf中的[ProductCatalogsToInstall]
  • ansible playbook 实战案例roles | 实现基于 IHS 的 AWStats 访问监控系统
  • 第R6周:LSTM实现糖尿病探索与预测
  • [特殊字符] 小豆包 API 聚合平台:让 AI 接入更简单、更高效
  • 【数据结构之二叉树】
  • 【0基础PS】图片格式
  • Java常用类:编程世界的瑞士军刀
  • Web网站的运行原理1
  • JAVA:MyBatis 核心组件详解的技术指南
  • Mac电脑 Pixelmator Pro 专业图像处理【媲美PS】
  • 基于FPGA的实时图像处理系统(2)——VGA显示彩条和图片
  • 简笔成画:让AI绘画变得简单而有趣
  • 国产化PDF处理控件Spire.PDF教程:如何使用 Python 添加水印到 PDF
  • Map 和 Set
  • 19.web api 10
  • docker 部署
  • Go协程:从汇编视角揭秘实现奥秘
  • day31 SQLITE
  • 【38页PPT】关于5G智慧园区整体解决方案(附下载方式)
  • spring整合JUnit
  • 主从功能组图示的扩展理解
  • PyTorch API 2
  • 【数据结构】递归与非递归:归并排序全解析
  • week3-[分支结构]2023
  • Linux上安装MySQL 二进制包
  • 细说数仓中不同类型的维度