当前位置: 首页 > 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.dtcms.com/a/341476.html

相关文章:

  • k8s笔记01
  • WIFI国家码修改信道方法_高通平台
  • 如何将数据从 iPhone 转移到 vivo?
  • 基于Python的反诈知识科普平台 Python+Django+Vue.js
  • 道路车道线分割数据集左车道右车道中线labelme格式3494张4类别
  • 工业电脑选得好生产效率节节高稳定可靠之选
  • Pycharm-002 Pycharm 编译器运行器不显示,日志不打印
  • MySQL 事务(重点)
  • GThinker多模态大模型:线索引导式反思的突破
  • Oracle官方文档翻译《Database Concepts 23ai》第2章-容器数据库与可插入数据库
  • Qwen Image edit的ComfyUI工作流搭建
  • vue中动态设置class类名和style样式
  • Javascript面试题及详细答案150道之(121-135)
  • 医学影像分析中的持续学习:近期进展与未来展望综述|文献速递-深度学习人工智能医疗图像
  • 42-Python基础语法-2
  • Lecture 5 GPUs课程笔记
  • Leetcode 深度优先搜索 (9)
  • Kafka-Kraft
  • leetcode3 无重复字符的最长子串
  • vue2封装日期选择组件--有时间选择版本
  • 创建Vue项目的不同方式及项目规范化配置
  • Playwright 与 Scrapy 的实际应用场景能力分析
  • 深入理解 Spring 的 @ControllerAdvice
  • 【AI应用】修改向量数据库Milvus默认密码
  • KylinV10服务器版和桌面版SVN搭建步骤
  • python中view把矩阵维度降低的时候是什么一个排序顺序
  • 深度解析LangChain:LLM应用开发利器
  • Linux: network: arp: arp_accept
  • linux内核 - 内存管理单元(MMU)与地址翻译(二)
  • 直播预告|鸿蒙全场景开发指南