78 Subsets(求子集Medium)

题目意思:求解一个数组的所有子集,子集内的元素增序排列
eg:[1,3,2] result:[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]
思路:这是一个递推的过程 [] []+[1] [2]+[1,2]+[]+[1]
   第k项的子集为第k个数分别加到k-1项的子集,再加上k-1项的子集
程序过程:
-------------------
   ans[0] []
-------------------
   ans[1] [1]
-------------------
   ans[2] [2]
   ans[3] [1,2]
-------------------
ans[4] [3]
ans[5] [1,3]
ans[6] [2,3]
ans[7] [1,2,3]
-------------------
时间复杂度:
  1+1+2+4+.....
  为2的n次方级别
运行时间:
  12ms

1
class Solution { 2 public: 3 vector<vector<int>> subsets(vector<int>& nums) { 4 vector<vector<int> > ans; 5 vector<int> empty; 6 ans.push_back(empty); //首先给ans[0]为空 7 sort(nums.begin(),nums.end()); 8 for(int i=0;i<nums.size();++i){ 9 int size=ans.size(); //不能在循环中赋值,因为ans在循环中长度增加 10 for(int j=0;j<size;++j){ 11 vector<int> temp; 12 temp=ans[j]; 13 temp.push_back(nums[i]); 14 ans.push_back(temp); 15 } 16 } 17 return ans; 18 } 19 };

 

posted @ 2015-06-06 10:45  影翕  阅读(181)  评论(0编辑  收藏  举报