当前位置: 首页 > 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.lryc.cn/news/626797.html

相关文章:

  • 一种融合AI与OCR的施工许可证识别技术,提升工程监管效率,实现自动化、精准化处理。
  • 【解决方案】powershell自动连接夜神adb端口
  • 深入解析RAGFlow六阶段架构
  • 结合SAT-3D,运动+饮食双重养腰新方式
  • 十二,数据结构-链表
  • Linux用30秒部署Nginx+Tomcat+Mysql+Jdk1.8环境
  • 学习嵌入式的第二十二天——数据结构——双向链表
  • 为6G和超快光谱铺路,《Nature Communications》发布新型太赫兹光芯片,实现多通道信号操纵
  • AI 效应: GPT-6,“用户真正想要的是记忆”
  • 书籍推荐|《Computational Methods for Rational Drug Design》574页
  • React响应式链路
  • CAMEL-Task1-CAMEL环境配置及你的第一个Agent
  • uniapp学习【上手篇】
  • CF每日4题(1500-1700)
  • 基于单片机水质检测系统/污水监测系统/水情监测
  • HTTP的协议
  • Git Commit 提交信息标准格式
  • GIT总结一键式命令清单(顺序执行)
  • 分布式唯一 ID 生成方案
  • C++高频知识点(三十)
  • [Mysql数据库] 用户管理选择题
  • macos 多个版本的jdk
  • 如何在高并发下,保证共享数据的一致性
  • 如何制作免费的比特币冷钱包
  • 自我探索之旅:哲学人格测试H5案例赏析
  • YT8512C拓展寄存器配置方式
  • 机器学习数学基础与商业实践指南:从统计显著性到预测能力的认知升级
  • 设计模式的一些笔记
  • 对抗式域适应 (Adversarial Domain Adaptation)
  • 零基础学Java第二十一讲---异常(1)