题目分析:求一个集合的所以子集,包括空集合全集。
解题思路:
递归回溯实现:
1)对集合中的数据进行排序,然后利用递归回溯的思想进行求解即可。
2)每次都对递归得到的子集进行保存即可,然后进一步递归即可。
解释:此题与上一个题有很大的关联,唯一区别是此题的子集数目可以去0~n,n为集合中数字数。
class Solution
{
public:
vector< vector<int> > subsets(vector<int> &nums)
{
vector< vector<int> > result;
vector<int> temp;
if (nums.size() == 0)
return result;
sort(nums.begin(), nums.end());
dfs(0, temp, nums, result);
return result;
}
void dfs(int k, vector<int> temp, vector<int> nums, vector< vector<int> > &result)
{
result.push_back(temp);
for (int i = k; i < nums.size(); i++)
{
temp.push_back(nums[i]);
dfs(i + 1, temp, nums, result);
temp.pop_back();
}
}
};