我的第一波回溯,写的时候就想到递归了,但是是递归的回溯,我以前写二叉树的路径等于某个值那种题目,一直在纠结为什么要减去,为什么不减去,什么时候该减去。
它取决于是否回溯,要所有的子集合,就去回溯尝试所有的集合可能,也是一种暴力的方法。
class Solution {
public:
vector<vector<int>> res;
void dfs(int start,vector<int>& tmp,vector<int>& nums)
{
for(int i=start;i<nums.size();i++)
{
tmp.push_back(nums[i]);
res.push_back(tmp);
dfs(i+1,tmp,nums);
tmp.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<int>tmp;
res.push_back(vector<int>());
if(nums.size()==0)return res;
dfs(0,tmp,nums);
return res;
}
};