题目分析
给定一个数组,要求返回这个数组的所有子集!
解题思路(1)
这道题也就是要求求出所有的子集,可以用深度优先遍历来求解(有可能复杂度会爆,为指数级),每个数字都可能是俩种状态,一种是0,一种是1.从左子树走是0,从右子树走是1,整个搜索树结束后,所有的状态都已经遍历完。代码见solution1.cpp(代码中还有详细说明)
class Solution {
public:
void solve_subset(int level,vector<int>temp,vector<vector<int>>& res,vector<int>& nums)
{
if(level==nums.size()) //到根结点就统计结果
{
res.push_back(temp);
return;
}
solve_subset(level+1,temp,res,nums); //这相当于左子树,从下一层回溯到这一层的时候,相当于出来一层了
temp.push_back(nums[level]); //这里是在记录结果,依次往上递增,temp是临时变量,相当于起了一个分支,二叉树过程
solve_subset(level+1,temp,res,nums); //上一句和这一句加起来相当于右子树
}
vector<vector<
|