标签:
题目意思:求解一个数组的所有子集,子集内的元素增序排列
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 };
标签:
原文地址:http://www.cnblogs.com/smallby/p/4556221.html