一、问题描述
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], [] ]
二、思路
本题意在求出集合的所有子集。
需要注意的是:空集也是子集,在初始条件下将空集加入结果集合。进入递归后从start开始,递归式在满足i+1 < nums.size()时,才会执行,即当前自己集合中的元素比原集合元素多不执行递归式。
三、代码
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> vec;
vector<int> res;
vec.push_back(res);
sub(nums,vec,res,0);
return vec;
}
void sub(vector<int>& nums, vector<vector<int>>& vec,vector<int> &res,int start){
for(int i = start; i < nums.size(); ++i){
res.push_back(nums[i]);
vec.push_back(res);
if(i + 1 < nums.size())
sub(nums,vec,res,i + 1);
res.pop_back();
}
}
};