题目描述:
Given a set of distinct integers, nums, return all possible subsets.
Note: 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:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int> > result;
vector<int> cur;
dfs(result,cur,nums,0);
return result;
}
void dfs(vector<vector<int> >& result,vector<int> cur,vector<int> nums,int start)
{
if(nums.size()==start) result.push_back(cur);
else
{
vector<int> temp_cur=cur;
vector<int> temp_nums=nums;
temp_cur.push_back(nums[start]);
dfs(result,cur,temp_nums,start+1);
dfs(result,temp_cur,temp_nums,start+1);
}
}
};