1. 题目
给你一个整数数组 nums
,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
子集
2. 分析
经典的回溯法。
对于每个元素,只有两种选择:选择或者不选择。
细节实现:为了避免多传参数,可以将res设为全局变量;同理nums的size也是如此。
代码如下:
class Solution {
public:
vector<vector<int>> res; // 全局变量
int n;
vector<vector<int>> subsets(vector<int>& nums) {
vector<int> track;
n = nums.size();
res.push_back({});
dfs(0, track, nums);
return res;
}
void dfs(int index, vector<int>& track, vector<int>& nums){
if(index == n)
return;
track.push_back(nums[index]);
res.push_back(track);
dfs(index + 1, track, nums); // 包含当前元素
track.pop_back();
dfs(index + 1, track, nums); // 不包含当前元素
}
};