给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/subsets
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
在区间[begin, end]
中取n个数字,问题转换为:
- 在区间
[begin, i]
中取一个数 + 在区间[i+1, end]
中取n-1
个数
穷举所有可能的i,列出结果,因为给定的数组没有重复的元素,下标不同则元素不同,可以直接按照上述规则取元素
代码
x :现在取到第几个数了
len :要取的数的数目
begin :区间[begin, end]的左端点,右端点表示数组结尾
nums :题目给定数组
temo :用来保存一次答案的临时数组
class Solution {
public:vector<vector<int>> ans;void dfs(int x, int len, int begin, vector<int>& nums, vector<int>& temp){if(x&#61;&#61;len)ans.push_back(temp);for(int i&#61;begin; i<nums.size(); i&#43;&#43;){temp.push_back(nums[i]);dfs(x&#43;1, len, i&#43;1, nums, temp);temp.pop_back();}}vector<vector<int>> subsets(vector<int>& nums){vector<int> t;for(int i&#61;0; i<&#61;nums.size(); i&#43;&#43;)dfs(0, i, 0, nums, t);return ans;}
};