78. Subsets

仅供自己学习

 

思路:

这种遍历全部可能的题都可用回朔法解决,做了挺多道了,有了大体的模板,但一些细节,如什么时候返回结果,返回的条件应该是什么,什么时候加入一种组合到结果里面,需要特别分析,这里我们是没进入回朔函数就将一种组合加入到结果里面,回朔结束就pop掉新加入得元素,又通过for循环将下一个新元素加入,在进入回朔函数 这样重复进行。

这里的空集不能直接,push_back([]),可以直接将一个空的vector加入进结果里面即可

 

代码:

 1 class Solution {
 2 public:
 3     vector<vector<int>> subsets(vector<int>& nums) {
 4         vector<vector<int>> res;
 5         vector<int> out;
 6         backtracking(0,nums,res,out);
 7         return res;
 8     }
 9     void backtracking(int start,vector<int>& nums,vector<vector<int>>& res,vector<int>& out){
10         res.push_back(out);
11         for(int i=start;i<nums.size();++i){
12             out.push_back(nums[i]);
13             backtracking(i+1,nums,res,out);
14             out.pop_back();
15         }
16         
17     }
18 };

 

posted @ 2021-02-09 17:01  Mrsdwang  阅读(43)  评论(0)    收藏  举报