Leetcode 78. 子集
题目
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
思路
- 全局变量数组path为子集,二维数组result用于存放子集的集合。递归函数的参数需要startIndex,用来搜索集合
- 确定终止条件:当剩余的集合变成空的时候,遍历就终止了,所以当startIndex大于或者等于nums.size() 递归终止
- 单层递归的逻辑:for循环遍历集合,遇到一个元素添加到path中,然后递归搜索下一个元素,然后回溯操作
代码
class Solution {
public:
vector<int> path;
vector<vector<int>> result;
void backTracking(vector<int> & nums,int startIndex)
{
result.push_back(path);
// 递归终止条件
if(startIndex >= nums.size())
{
// startIndex 搜索到数组末尾
return;
}
for(int i = startIndex; i < nums.size(); i++)
{
// path收集元素
path.push_back(nums[i]);
backTracking(nums,i + 1);// 搜索下一个元素 不可以重复搜索
path.pop_back();// 回溯操作
}
}
vector<vector<int>> subsets(vector<int>& nums) {
result.clear();
path.clear();
backTracking(nums,0);
return result;
}
};