给定一组不含重复元素的整数数组 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==len)
ans.push_back(temp);
for(int i=begin; i<nums.size(); i++)
{
temp.push_back(nums[i]);
dfs(x+1, len, i+1, nums, temp);
temp.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums)
{
vector<int> t;
for(int i=0; i<=nums.size(); i++)
dfs(0, i, 0, nums, t);
return ans;
}
};