这道题主要是用的回溯的方法来做的,我是参考的代码回想录里面的思路来写的。刚开始的话我致力于一定要把这个完整的过程推一遍,不推到底我不死心,感觉用掉了自己很多的时间,但是也算是弄懂了吧,就是弄透还是需要一点时间。
题解:
我的结论是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;}
};