题目描述
回溯法求解问题 画树形结构非常重要因为可以从中得到我们需要的判断条件
如下图
从上图中可以看出,我们需要在每一个节点处收集结果,同时没有需要砍掉的分支,那么就代表我们不需要添加判断条件进行限制
代码实现
class Solution {
private:
vector<int> path;
vector<vector<int>> result;
public:
void backtracking(vector<int>& nums, int start_index)
{ // 因为每一个节点都需要收割结果,因此放在最前面
result.push_back(path);
if(start_index >= nums.size())
{ // 出界即返回
return;
}
for(int i = start_index; i<nums.size(); i++)
{
path.push_back(nums[i]);
backtracking(nums, i+1);
path.pop_back();
}
return;
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums, 0);
return result;
}
};