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

    90. Subsets II

    题目

     Given a collection of integers that might contain duplicates, nums, return all possible subsets (the power set).
    
    Note: 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号元素的加入,就是有i和没有i的场景。没有i的场景就是已有的集合。有i的就是对已有的集合追加上i后的集合。两个的并集就是加入i之后的结果。
    如果i和上一个元素是重复的,则只需要考虑i-1加入过集合的那部分子集。对于不包含i-1元素的场景来说,这部分子集加入i的结果集,和已有的加入过i-1的结果集是重复的。所有跳过这部分就可以了。

    
    // 90. Subsets II
    class Solution_90 {
    public:
    
    	void dfs(vector<vector<int>> &res,vector<int> &out,vector<int>&nums,int pos)
    	{
    		res.push_back(out);
    
    		for (int i = pos; i < nums.size();i++)
    		{
    			out.push_back(nums[i]);
    			dfs(res, out, nums, i + 1);
    			out.pop_back();
    			while ((i+1)<nums.size()&&nums[i+1]==nums[i])
    			{
    				i++;
    			}
    		}
    		return;
    	}
    
    	vector<vector<int>> subsetsWithDup(vector<int>& nums) {
    
    		vector<vector<int>> res;
    		vector<int> out;
    		if (nums.empty())
    		{
    			return res;
    		}
    		sort(nums.begin(),nums.end());
    
    		dfs(res, out, nums, 0);
    
    		return res;
    
    	}
    };
    
    

    题目来源

  • 相关阅读:
    静态文件
    orm多表操作
    thinkphp5.0模块设计
    thinkphp5.0URL访问
    thinkphp5.0入口文件
    thinkphp5.0生命周期
    thinkphp5.0架构总览
    thinkphp5.0目录结构
    thinkphp5.0开发规范
    thinkphp5.0安装
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8810382.html
Copyright © 2011-2022 走看看