78子集
来源: LeetCode 78 子集
题目描述
78. 子集
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
思路分析
获取所有的子集仍是回溯的思想枚举所有的可能
子集不同于全排列,其得到的路径不为决策的树的高度,而是将每一段路径作为答案
但其本质是一样的只需要更改添加答案段的代码
def bacetrack(path, 选择列表)
res.push(path)
for 选择 in 选择列表
path.add(选择) // 做出选择
将刚刚的选择从选择列表中删除
bacetrack(path, 新选择列表)
path.delete(选择) //撤销选择
代码
class Solution {
public:
vector<vector<int>> res;
vector<int> _nums;
vector<vector<int>> subsets(vector<int>& nums) {
_nums = nums;
vector<int> temp;
subsetsRecur(0, temp);
return res;
}
void subsetsRecur(int pos, vector<int>& arry){
res.push_back(arry);
for(int i=pos; i<_nums.size(); ++i){
arry.push_back(_nums[i]);
subsetsRecur(i+1, arry);
arry.pop_back();
}
}
};
算法分析
O(N!)
相似扩展
归纳总结