回溯
回溯中的子集问题
// 定义记录结果的数组
vector<vector<int>> result;
// 定义记录某个子集的数组
vector<int> path;
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
// 数组清空
result.clear();
// 每个子集都包含空子集,空子集,加入结果
result.push_back({});
// 调用回溯算法
backtrucking(0,nums.size(),nums);
// 返回结果
return result;
}
// 定义回溯算法
void backtrucking(int start,int end,vector<int>& nums){
// 推出递归的条件
if(nums.size()==0){
// result.push_back(path);
return;
}else{
// 定义循环结构
for(int i=start;i<nums.size();i++){
// 将第i个元素加入子集
path.push_back(nums[i]);
// 将子集加入到结果中
result.push_back(path);
// 递归
backtrucking(i+1,end,nums);
// 弹出最外面元素
path.pop_back();
}
return;
}
return;
}
};