子集
问题:
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
思路:
采用递归回溯的方法,借助临时数组进行回溯。
class Solution {
public:
vector<int> t;
vector<vector<int>> ans;
void dfs(int cur, vector<int>& nums) {
if (cur == nums.size()) { // 递归基
ans.push_back(t);
return;
}
// 选择当前位置进行递归
t.push_back(nums[cur]);
dfs(cur + 1, nums);
// 不选择当前位置进行递归
t.pop_back();
dfs(cur + 1, nums);
}
vector<vector<int>> subsets(vector<int>& nums) {
dfs(0, nums);
return ans;
}
};
时间复杂度:O(n * 2 ^n)
空间复杂度:O(n)