题目描述
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
输入: nums = [1,2,3]
输出:
[[3],[1],[2],[1,2,3],[1,3], [2,3],[1,2],[]]
特别注意,此题是求解字节,并不是求全排列,要区分跟全排列的区别,所示这个地方在处理起点的时候要特别注意一下,而且,子集合是包含空集的,所以在一定程度上是不需要return的。
主要思路
该题的主要思路还是延续基于DFS的回溯的方法,来进行求解,顾先回顾下。
1 | backtracking() { |
故按这个套路来求解,所以首先确定递归的终止条件,一般的时候是开始的下标大于等于节点的数目的时候进行终止,但是在该题目中,是取子集,遍历整棵树,不需要进行剪枝,故整个代码是不需要终止条件的,所以上述代码中的
1 | if(condition) # 这一步可以忽略了 |
下面就是核心代码,也就是递归回溯的那一部门,首先 vector<int> path
来存储每一步回溯子集结果,然后vector<vector<int>> result
来吧子集的结果都存储下来,特别注意,因为子集是无序的,所以所以for循环要从startIndex开始,而不是从0开始,故明确这几点后,开始写for循环以及递归的核心
1 | for(int i=startIndex;i<num.size();i++){ |
然后再写好之后,就每次递归调用的时候,把终止条件的地方改成result.push_back(path)
即可。
所有的代码如下:
1 | class Solution { |