zoukankan      html  css  js  c++  java
  • LeetCode(90) Subsets II

    题目

    Given a collection of integers that might contain duplicates, nums, return all possible subsets.

    Note:
    Elements in a subset must be in non-descending order.
    The solution set must not contain duplicate subsets.
    For example,
    If nums = [1,2,2], a solution is:

    [
              [2],
              [1],
              [1,2,2],
              [2,2],
              [1,2],
              []
    ]

    分析

    求带有重复元素的序列的全子集;

    用动态规划的思想,逐个向前i-1的元素的子集中添加第i个元素,添加时需要判重,若已存在,则不添加。

    AC代码

    class Solution {
    public:
        vector<vector<int>> subsetsWithDup(vector<int>& nums) {
            vector<vector<int> > ret(1, vector<int>());
    
            if (nums.empty())
                return ret;
    
            sort(nums.begin(), nums.end());
    
            int size = nums.size();
            for (int i = 0; i < size; ++i)
            {
                ret = subSets(ret, nums, i);
            }
            return ret;
        }
    
        vector<vector<int> > subSets(vector<vector<int> > &ret, vector<int> &nums, int &idx)
        {
            vector<int> tmp;
            int count = ret.size();
    
            //对于每一个已有子集合,加入新元素
            for (int i = 0; i < count; ++i)
            {
                //当前集合
                tmp = ret[i];       
                tmp.push_back(nums[idx]);
                if (find(ret.begin(), ret.end(), tmp) != ret.end())
                    continue;
                ret.push_back(tmp); 
            }//for
    
            return ret;
        }
    };

    GitHub测试程序源码

  • 相关阅读:
    3.数据库分类
    2.Oracle数据库安装教程
    1.Oracle数据库简介
    MySQL最全存储引擎、索引使用及SQL优化的实践
    大数据各个工具随笔
    初入Shell
    第4章 DDL数据定义
    第3章 Hive数据类型
    第2章 Hive安装
    MySQL 创建数据库
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214820.html
Copyright © 2011-2022 走看看