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

力扣47. 全排列 II

思路

用 used 保存在一次答案中取过的数组索引。
先对数组进行排序,然后尝试取每个元素作为排列。

  • 首先需要满足不重复取自己,即 !used.contains(i)
  • 其次当前元素和前一个元素不同时可取,即 i == 0 || nums[i] != nums[i - 1]
    • 如果当前元素和前一个元素相等,且它前面的元素没取过,则说明重复了。

    换句话说,如果取到了当前元素,但它前面的元素没取过,就说明现在是没按顺序取的。在这俩相等的情况下(因为如果不等前面 nums[i] != nums[i - 1] 就判断可取了),之前一定按顺序取过一次,所以一定重复了。

对于最后一种难懂的情况,例如 nums = [1, 1', 2](记第二个1为1’),顺序时按照 1, 1', 2 的顺序取过一次答案了,因此在以 1’ 作为第一个元素时,就不能再取一次 1', 1, 2 作为答案了(此时 i == 1, used.contains(i - 1) == False)。

代码

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    vector<int> nums;
    unordered_set<int> used;    // 用于保存取过的nums索引

    void backTrack() {
        if (path.size() == nums.size()) {
            result.emplace_back(path);
        }
        else {
            for (int i = 0; i < nums.size(); i++) {
                if (!used.contains(i) && (i == 0 || nums[i] != nums[i - 1] || used.contains(i - 1))) {
                    path.emplace_back(nums[i]);
                    used.insert(i);
                    backTrack();
                    path.pop_back();
                    used.erase(i);
                }
            }
        }
    }
public:
    vector<vector<int>> permuteUnique(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        this->nums = nums;
        backTrack();
        return result;
    }
};

相关文章:

  • 文心一言AI创意画
  • 清华大学DeepSeek文档下载,清华大学deepseek下载(完成版下载)
  • RAG技术落地:核心痛点与应对策略全面解析
  • 自动驾驶两个传感器之间的坐标系转换
  • Anaconda 2025 最新版安装与Python环境配置指南(附官方下载链接)
  • 二、大模型微调技术栈全解析
  • go基础语法
  • 【论文学习】DeepSeek-V3 总结
  • 002简单MaterialApp主题和Scaffold脚手架
  • 要实现将JSON格式数据动态生成思维导图图片,可以使用`pygraphviz`库结合`json`解析。以下是完整实现代码:
  • vmware系统磁盘扩容
  • 数据开发面试:DQL,
  • seacmsv9注入管理员账号密码+orderby+limit
  • 【前端】【面试】【树】JavaScript 树形结构与列表结构的灵活转换:`listToTree` 与 `treeToList` 函数详解
  • 基于Pydantic封装的通用模型在API请求验证中的应用
  • Python中的函数是什么?如何定义和调用它们?
  • 第十一站:深度学习模型的训练与评估
  • Cramér-Rao界:参数估计精度的“理论底线”
  • IO/网络IO基础全览
  • PostgreSQL的学习心得和知识总结(一百七十)|深入理解PostgreSQL数据库之 处理HAVING子句 的使用和实现
  • 济南网站开发公司/爱站网 关键词挖掘工具
  • 唯品会购物网站开发项目/国外独立站网站
  • 惠济区建设局网站/线上引流的八种推广方式
  • 班级网站建设php/做网站公司哪家比较好
  • 信阳网站开发公司/网球新闻最新消息
  • 帝国cms做招聘网站/全国新增确诊病例