LeetCode每日一题 2020-9-20 78.子集 dfs,满二叉树
题目描述
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
解题思路
一个集合的幂集总共包含2n,联想满二叉树,一颗高度为n的满二叉树的叶子结点总共有2n个叶子结点,所以可以用一颗满二叉树来表示一个集合的幂集。如下图(0代表不取第n个数,1代表取第n个数):
题解代码
class Solution {
public:
void dfs(int t,vector<int> &nums,vector<vector<int>> &ans,vector<int> &temp){
if(t>=nums.size()){
ans.push_back(temp);
return;
}
temp.push_back(nums[t]);
dfs(t+1,nums,ans,temp);
temp.pop_back();
dfs(t+1,nums,ans,temp);
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> temp;
dfs(0,nums,ans,temp);
return ans;
}
};