目录
1.子集

对于这道题,还是先进行画图来方便寻找思路

通过图中可以看到,每一次向下走的时候都选择的是后面的数字,例如1后面可以选择2和3,2就只能选择3了,如果2选择1的话,就会重复,所以这道题的思路就很明显了,dfs的时候传入数组和开始位置,在后面dfs的时候就从下一个位置开始,同时也要注意还原现场
cpp
class Solution {
vector<vector<int>> ret;
vector<int> path;
public:
vector<vector<int>> subsets(vector<int>& nums)
{
dfs(nums, 0);
return ret;
}
void dfs(vector<int>& nums, int pos)
{
ret.push_back(path);
for(int i = pos; i < nums.size(); i++)
{
path.push_back(nums[i]);
dfs(nums, i + 1);
path.pop_back();
}
}
};