AC截图
题目
思路
维护一个集合tmp,用于记录目前的子元素
for (int i = start; i < nums.size(); ++i) {
subset.push_back(nums[i]);
backtrack(nums, result, subset, i + 1);
subset.pop_back();
}
}
-
遍历从
start
到nums.size()
的所有元素,尝试将每个元素加入当前子集。 -
使用
push_back
做出选择,然后递归调用backtrack
处理剩余的元素。 -
使用
pop_back
撤销选择,以便尝试不加入当前元素的情况。
代码
class Solution {
public:
void backtrack(vector<vector<int>>& res,vector<int>& nums,vector<int>& tmp,int first){
res.emplace_back(tmp);
for(int i=first;i<nums.size();i++){
tmp.push_back(nums[i]);
backtrack(res,nums,tmp,i+1);
tmp.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> res;
vector<int> tmp;
backtrack(res,nums,tmp,0);
return res;
}
};