这是一个经典的回溯搜索问题,从头至尾遍历一遍元素,对于每个元素,由均有选与不选两种情况,首先选这个元素,进入下一层递归中,递归完后退回来不选这个元素,继续往后遍历,题解代码如下
class Solution {
vector<vector<int>> res;
void dfs(int start, vector<int> &nums,vector<int> &temp){
res.push_back(temp);
for(int i=start;i<nums.size();i++){
temp.push_back(nums[i]);
dfs(i+1,nums,temp);
temp.pop_back();
}
}
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> temp;
dfs(0,nums,temp);
return res;
}
};