Leetcode::Subsets

Given a set of distinct integers, S, return all possible subsets.

分析:题目就是给一个整数集合,给出所以的子集。 基本思想是递归或者说是迭代的方法。用前面得到的集合来构造

后面的。但是怎样高效、方便的构造集合是关键点。比如,开始想到的是先生成集合中0个元素、1个元素。。。逐步增多

但这样很难实现。实际高效的做法是用i个元素生成所有子集,然后往里面添加第(i+1)个元素,将得到的元素集合加到前面结果

中,就可以得到最终的结果了。

 1 class Solution {
 2 public:
 3     vector<vector<int> > subsets(vector<int> &S) {
 4         vector<vector<int> > sets;
 5         vector<int> subs;
 6         sort(S.begin(),S.end());
 7         sets.push_back(subs);
 8         for(int i=0;i<S.size();i++)
 9         {
10             int c_size = sets.size();
11             for(int j=0;j<c_size;j++)
12             {
13                 subs = sets[j];
14                 subs.push_back(S[i]);
15                 sets.push_back(subs);
16             }
17         }
18         
19         return sets;
20     }
21 };

代码非常的简洁,但是注意第10行,是每次加之前,需要记录集合中已有的子集个数,否则后面size变化,会导致死循环!


posted on 2014-06-05 17:18  soyscut  阅读(175)  评论(0编辑  收藏  举报

导航