码迷,mamicode.com
首页 > 其他好文 > 详细

【Leetcode】78. Subsets(求集合的子集问题)

时间:2018-07-17 21:12:44      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:方法   sort   分享   log   col   mic   microsoft   set   inf   

78. Subsets(求集合的子集问题)

【分析】:求集合的所有子集问题。题目要求子集中元素非递减序排列,因此我们先要对原来的集合进行排序。原集合中每一个元素在子集中有两种状态:要么存在、要么不存在。这样构造子集的过程中每个元素就有两种选择方法:选择、不选择,因此可以构造一颗二叉树,例如对于例子中给的集合[1,2,3],构造的二叉树如下(左子树表示选择该层处理的元素,右子树不选择),最后得到的叶子节点就是子集:{ 链接 }

技术分享图片

 1 class Solution
 2 {
 3 private:
 4     vector<vector<int>> rets;
 5 public:
 6     vector<vector<int>> subsets(vector<int>& nums)
 7     {
 8         sort(nums.begin(), nums.end());
 9         vector<int> yhs;
10         DFS(0, nums, yhs);
11         return rets;   
12     }
13  
14     void DFS(int end, vector<int> &nums, vector<int> &yhs)
15     {
16         if(end == nums.size())
17         {
18             ret.push_back(yhs);
19             return;
20         }
21         yhs.push_back(nums[end]);
22         DFS(end + 1, nums, yhs);
23         yhs.pop_back();
24         DFS(end + 1, nums, yhs);
25     }
26 };

 

【Leetcode】78. Subsets(求集合的子集问题)

标签:方法   sort   分享   log   col   mic   microsoft   set   inf   

原文地址:https://www.cnblogs.com/sunbines/p/9325777.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!