码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode-Subsets-78

时间:2016-08-31 00:53:36      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:

输入一个数组,求所有子集

也是选择问题,在上一题的基础上枚举子集长度,然后dfs+回溯选择。同样注意去重

 1 class Solution {
 2 public:
 3     void dfs(vector<int> a,int i,vector<vector<int> > &v,vector<int> vv,int k){
 4         if(vv.size()==k){
 5             v.push_back(vv);
 6             return;
 7         }
 8         for(int j=i+1;j<a.size();j++){
 9             if(j!=i+1&&a[j]==a[j-1]) continue;
10             vv.push_back(a[j]);
11             dfs(a,j,v,vv,k);
12             vv.pop_back();
13         }
14     }
15     vector<vector<int> > subsets(vector<int>& nums) {
16         int len=nums.size();
17         vector<vector<int> > v;
18         if(len==0) return v;
19         vector<int> vv;
20         v.push_back(vv);
21         sort(nums.begin(),nums.end());
22         for(int k=1;k<=len;k++){
23             for(int i=0;i<len;i++){
24                 vv.push_back(nums[i]);
25                 dfs(nums,i,v,vv,k);
26                 vv.pop_back();
27             }
28         }
29         return v;
30     }
31 };

 

leetcode-Subsets-78

标签:

原文地址:http://www.cnblogs.com/0summer/p/5824212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!