首页 > 代码库 > Subsets <leetcode>

Subsets <leetcode>

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

Note:

  • Elements in a subset must be in non-descending order.
  • The solution set must not contain duplicate subsets.

 

For example,
If S = [1,2,3], a solution is:

[  [3],  [1],  [2],  [1,2,3],  [1,3],  [2,3],  [1,2],  []]

算法:该题的解空间类似一个排列树,但是又不完全相同,树种根到所有节点的路径是一个解,还有不要忘了空集。直接用深度优先遍历解决:

10/10test cases passed
Runtime::44ms
 1 class Solution { 2 public: 3     vector<vector<int> > subsets(vector<int> &S) { 4        vector<vector<int>> result; 5        int len=S.size(); 6        if(S.size()<=0)  return result; 7         sort(S.begin(),S.end()); 8         vector<int>  temp; 9         doit(result,S,0,len,temp);10         return result;11     }12     void doit(vector<vector<int>> &result,vector<int> &s,int dep,int len,vector<int> &temp)13     {14         result.push_back(temp);15         for(int i=dep;i<len;i++)16         {17             temp.push_back(s[i]);18             doit(result,s,i+1,len,temp);19             temp.pop_back();20         }21     }22 };

 

Subsets <leetcode>