作者:倒带灬樱花巷_317 | 来源:互联网 | 2023-08-24 14:49
1. 题目
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]
]
2. 分析
子集树。采用DFS,利用一个单独的存储空间st存储集合中的值保留/不保留,即0/1。那么求集合的子集相当于去找所有不重复的0,1排列。
3. C++程序
class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> res; vector<int> st;for(int i&#61;0;i0);dfs(0,res,st,nums);return res;}void dfs(int index,vector<vector<int>>& res,vector<int> st,vector<int> nums){if(index>&#61;st.size()){ vector<int> subset;for(int i&#61;0;iif(st[i]&#61;&#61;1) subset.push_back(nums[i]);}res.push_back(subset);return;}for(int i&#61;0;i<2;i&#43;&#43;){int temp &#61; st[index];st[index] &#61; i;dfs(index&#43;1,res,st,nums);st[index] &#61; temp; }}
};