首页 > 其他 > 详细

leetcode-Subsets-78

时间:2016-08-31 00:50:21      阅读:241      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!