Leetcode78. Subsets(求集合的子集问题)
Posted sunbines
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode78. Subsets(求集合的子集问题)相关的知识,希望对你有一定的参考价值。
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 };
以上是关于Leetcode78. Subsets(求集合的子集问题)的主要内容,如果未能解决你的问题,请参考以下文章