首页 > 其他 > 详细

leetcode 90. subsets

时间:2017-08-17 00:01:15      阅读:237      评论:0      收藏:0      [点我收藏+]

技术分享

解题思路:

要生成子集,对于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

原文:http://www.cnblogs.com/fanhaha/p/7376532.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!