leetcode 90. subsets

Posted 哈哈哈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 90. subsets相关的知识,希望对你有一定的参考价值。

解题思路:

要生成子集,对于vector 中的每个数,对于每个子集有两种情况,加入或不加入。

因此代码:

class Solution {
public:
    void subsetG(vector<int> nums, vector<vector<int>>& result, vector<int> temp, int c)
    {
        if(c>=nums.size())
        {
           result.push_back(temp); 
            return ;
        }
        int i=c;
            subsetG(nums,result, temp,i+1);        
            temp.push_back(nums[i]);
            subsetG(nums,result, temp,i+1);


    }
        
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
    
        vector<vector<int>> result;
        vector<int> temp;
       subsetG(nums,  result,temp,0);
   
        return result;

    }
};

 

 

 

 但是这样会造成许多重复的子集,因为重复的情况我们只需要考虑一次.可以分为拿和不拿. 如果拿的话就按照正常往下一层搜索, 如果不拿当前值的话, 那么也要跳过接下来和当前值相等的元素.

class Solution {
public:
    void subsetG(vector<int> nums, vector<vector<int>>& result, vector<int> temp, int c)
    {
        if(c>=nums.size())
        {
           result.push_back(temp); 
            return ;
        }
        int i=c;
           while(c+1<nums.size()&&nums[i]==nums[c+1])
           {
               c++;
           }
            subsetG(nums,result, temp,c+1);
            
            temp.push_back(nums[i]);
   
            subsetG(nums,result, temp,i+1);
  
    }
        
    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
    

        vector<vector<int>> result;
        vector<int> temp;
       subsetG(nums,  result,temp,0);
        
        
        return result;
        
        
        
    }
};

  

 

以上是关于leetcode 90. subsets的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 78. Subsets (backtracking) 90 subset

#Leetcode# 90. Subsets II

Leetcode 90. Subsets II

[leetcode-90-Subsets II]

Leetcode 90: Subsets II

Leetcode 90. Subsets II