给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

**输入:**nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

**输入:**nums = [0]
输出:[[],[0]]

提示:

1 <= nums.length <= 10

-10 <= nums[i] <= 10

nums 中的所有元素 互不相同

对于每个元素只有两种情况,在子集中或不在子集中

可以把每个子集都看成len个元素,只不过不在子集中的元素不去记录

所以我们可以对每个元素递归所有情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
vector<vector<int>> ans;
vector<int> mid;
vector<vector<int>> subsets(vector<int> &nums) {
sub(nums, 0);
return ans;
}
void sub(vector<int> &nums, int cur) {
if (cur == nums.size()) {
ans.push_back(mid);
return;
}
mid.push_back(nums[cur]);
sub(nums, cur + 1);

mid.pop_back();
sub(nums, cur + 1);
}
};