zoukankan      html  css  js  c++  java
  • 90.Subsets II

    给定一个数组,数组中有重复元素,求出这个数组的子集,空集也算子集。


    Input: [1,2,2]
    Output:
    [
    [2],
    [1],
    [1,2,2],
    [2,2],
    [1,2],
    []
    ]


    思路:
    因为有重复元素,所以先排序,在第78题Subsets的基础上,使用set去重即可,注意set不能插入空数组,最后将set转化为Vector<vector<int>> 容器,再插入空集即可。

    class Solution {
    public:
        vector<vector<int>> subsetsWithDup(vector<int>& nums) {
            sort(nums.begin(), nums.end());
            set<vector<int>> res;
            int n = nums.size();
            for (int i = 1; i <= n; i++) {
                vector<int> tmp;
                subsetsWithDupDFS(nums, tmp, 0, i, res);
            }
            vector<vector<int>> ans(res.begin(), res.end());
            ans.push_back({});
            return ans;
        }
        void subsetsWithDupDFS(vector<int>& nums, vector<int>& tmp, int start, int k, set<vector<int>>& res) {
            if (tmp.size() == k) {
                res.insert(tmp); return;
            }
            for (int i = start; i < nums.size(); i++) {
                tmp.push_back(nums[i]);
                subsetsWithDupDFS(nums, tmp, i + 1, k, res);
                tmp.pop_back();
            }
        }
    };

    思考:要是不用set去重该怎么做呢?

  • 相关阅读:
    指定pdf的格式
    iptables 防火墙
    jumpserver2
    jquery UI
    python 自动化审计
    Jumpserver
    认识二进制安全与漏洞攻防技术 (Windows平台)
    将这段美化的css代码
    pycharm
    android Tips
  • 原文地址:https://www.cnblogs.com/luo-c/p/13039037.html
Copyright © 2011-2022 走看看