Given a set of distinct integers, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,3]
, a solution is:
[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]
题目要求求一个集合的全部子集,并且每个子集的元素都是升序的。可以先把给定的数组排序然后用递归的方法得到全部子集。
代码:
class Solution {
public:
void backtracking(vector<int>nums,int idx,int n,vector<int>cur,vector<vector<int> >&res)
{
if(idx==n)
{
res.push_back(cur);
return;
}
backtracking(nums,idx+1,n,cur,res);
cur.push_back(nums[idx]);
backtracking(nums,idx+1,n,cur,res);
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> >res;
if(nums.empty()) return res;
int n=nums.size();
sort(nums.begin(),nums.end());
vector<int>cur;
backtracking(nums,0,n,cur,res);
return res;
}
};
也可以用非递归的方法:
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> >res(1);
if(nums.empty()) return res;
int n=nums.size();
sort(nums.begin(),nums.end());
for(int i=0;i<n;i++)
{
int m=res.size();
for(int j=0;j<m;j++)
{
res.push_back(res[j]);
res.back().push_back(nums[i]);
}
}
return res;
}
};