- 子集
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
迭代法
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> ans;
int n = nums.size();
for (int mask = 0; mask < (1 << n); ++mask) {
vector<int> tmp;
for (int i = 0; i < n; ++i) {
if (mask & (1 << i)) {
tmp.emplace_back(nums[i]);
}
}
ans.emplace_back(tmp);
}
return ans;
}
};
回溯
class Solution {
public:
vector<int> tmp;
vector<vector<int>> ans;
vector<vector<int>> subsets(vector<int>& nums) {
dfs(0, nums);
return ans;
}
void dfs(int cur, vector<int> nums) {
if (cur == nums.size()) {
ans.emplace_back(tmp);
return;
}
tmp.emplace_back(nums[cur]);
dfs(cur + 1, nums);
tmp.pop_back();
dfs(cur + 1, nums);
}
};