LeetCode78. 子集

题目

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

分析

代码

 1 class Solution {
 2 public:
 3     vector<int>path;
 4     vector<vector<int>>res;
 5 
 6     void backtracking(vector<int>nums,int startIndex){
 7         res.push_back(path);  
 8         //每进行一次递归,要保存上一层递归结果,相当于在搜索树往下一层搜索时,要保存上层
 9         if(startIndex == nums.size()) {
10             return;
11         }
12         for(int i = startIndex;i < nums.size();i++){
13             path.push_back(nums[i]);
14             backtracking(nums,i+1);
15             path.pop_back();
16         }
17     }
18     vector<vector<int>> subsets(vector<int>& nums) {    
19         backtracking(nums,0);
20         return res;
21     }
22 };

总结

这是回溯问题的子集问题。基本还是想象搜索树的样子,模板来做。注意 在何处将结果存入 res中? 应该是回溯函数的顶部,因为要搜索到每一层要将结果存入,这点不同于之前回溯的组合、分割问题(它们是搜索的叶子结点再存放)。

原文地址:https://www.cnblogs.com/fresh-coder/p/14357642.html