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

每日一题——47. 全排列 II

题目链接:47. 全排列 II - 力扣(LeetCode)

代码:

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;

    void traversal(vector<int>& nums,vector<bool> usedy,vector<bool> usedx)
    {
        if(path.size() == nums.size())
        {
            result.push_back(path);
            return ;
        }

        for(int i = 0; i < nums.size(); i++)
        {
            if(usedy[i] == true) continue;
            if( i > 0  && usedx[i-1] == false&& nums[i] == nums[i-1]) continue;
            usedy[i] = true;
            usedx[i] = true;
            path.push_back(nums[i]);
            traversal(nums,usedy,usedx);
            path.pop_back();
            usedy[i] = false;
            usedx[i] = false;
        }
    }
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        vector<bool> usedy(nums.size(),false);
        vector<bool> usedx(nums.size(),false);
        sort(nums.begin(),nums.end());
        traversal(nums,usedy,usedx);
        return result;
    }
};

与全排列1不同的就是这里有重复的数字,因此设计到去重。

去重依然就用树层去重,树枝不去重的原理。

两个相同的树a,b,树枝上可以重复选取,但树层上不行(会产生重复的全排列)。usedx完成此逻辑

一个树a,树枝上不能反复选取,usedy完成此逻辑。

但实际上一个used也就可以完成上面的逻辑,可以看到代码中对usedx和usedy的条件判断是不冲突的。

因此可以合并为:

if(i> 0 && used[i-1] == false && nums[i] == nums[i-1]) continue;  //usedx的逻辑
if(used[i] == true) continue;  //usedy的逻辑

一个used即可实现所有功能


http://www.kler.cn/a/548702.html

相关文章:

  • Linux系统Centos安装部署nginx代理
  • 数字内容体验未来趋势:五大平台横向对比与深度解析
  • 惠普HP Color LaserJet CP1215/1210彩色打印机打印校准方法
  • . Unable to find a @SpringBootConfiguration(默认软件包中的 Spring Boot 应用程序)
  • AI大模型学习(二): LangChain(一)
  • SpringBoot+数据可视化的奶茶点单购物平台(程序+论文+讲解+安装+调试+售后)
  • GMSL 实例1:当 MAX96717 遇上 MAX96724,打通 Camera 视频数据传输
  • 运维脚本——2.备份与恢复
  • YOLO11环境搭建CUDA12.6
  • AI大模型技术基础入门
  • [NKU]C++基础课(二)--- externC、强制类型转换、类与对象、面向对象程序设计语言、对象创建和使用、类的定义、封装
  • 常用查找算法整理(顺序查找、二分查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)
  • TCP/UDP 简介,三次握手与四次挥手
  • 哈希-字母异位词分组
  • Vue 3 30天精进之旅:Day 23 - 性能优化
  • 【python】连接Jira获取token以及jira对象
  • domain 网络安全
  • 【JavaWeb学习Day16】
  • 为什么要选择3D机器视觉检测
  • 二叉搜索树的实现(C++)