给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
本题与分割问题相比,是要将所有的遍历结果都添加到返回数组中,因此就不能只在终止时,才将vec添加到result中,纵向递归时,vec每添加一个元素,就将一个结果加入到result。
class Solution {
private:
vector<vector<int>> result;
vector<int> vec;
public:
void backtracking(vector<int>& nums, int startIndex){
if(startIndex >= nums.size()){
return;
}
for(int i = startIndex; i < nums.size(); i++){
vec.push_back(nums[i]);
result.push_back(vec);
backtracking(nums, i + 1);
vec.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
result.push_back({});
if(nums.size() == 0){
return result;
}
backtracking(nums, 0);
return result;
}
};