78. 子集
问题
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
示例 1:
输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
示例 2:
输入:nums = [0]
输出:[[],[0]]
分析
对于每个位置的数字,有选与不选两种情况,选就push_back,不选就跳过。往下执行该子问题,显然是dfs。
代码
class Solution {
public:
vector<vector<int> > res;
int n_n;
void dfs(const vector<int>& nums, int x, vector<int> temp) {
if (x >= n_n) {
res.push_back(temp);
temp.clear();
return ;
}
// 选
temp.push_back(nums[x]);
dfs(nums, x+1, temp);
// 不选
temp.pop_back();
dfs(nums, x+1, temp);
}
vector<vector<int>> subsets(vector<int>& nums) {
n_n = nums.size();
vector<int> temp;
dfs(nums, 0, temp);
return res;
}
};

浙公网安备 33010602011771号