这道题主要是用的回溯的方法来做的,我是参考的代码回想录里面的思路来写的。刚开始的话我致力于一定要把这个完整的过程推一遍,不推到底我不死心,感觉用掉了自己很多的时间,但是也算是弄懂了吧,就是弄透还是需要一点时间。
题解:
我的结论是for循环控制的就是每一层的递归。比如说nums=[1,2,3],长度为3,则第一层遍历的就是以1为结点的递归,然后在每一层的开始进行收割。第二、三层便以此进行递归。控制好头即可
代码如下:
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums,int startIndex){
result.push_back(path);
if(startIndex==nums.size()){
return;
}
//回溯的for语句
for(int i=startIndex;i<nums.size();i++){
path.push_back(nums[i]);
backtracking(nums,i+1);
path.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums,0);
return result;
}
};