M78.子集
backtracking, https://leetcode.cn/problems/subsets/
思路:和 M46.全排列 相似,将上题递归函数的“== nums.size()”换成for(int k = 0 ; k < nums.size() ; k++) 即可,其余对应稍加修改即可。
思路:最棒的思路就是利用二进制关系,每个数字只有0/1两个状态,某一个子集中,那么这个子集就一共有2^n个,然后利用二进制枚举来实现,同样也可以进行递归考虑问题,也是每个位置进行0/1两种状态dfs,然后记录长度输出即可
cpp
class Solution {
public:
vector<int> t;
vector<vector<int>> ans;
vector<vector<int>> subsets(vector<int>& nums) {
int n = nums.size();
for (int mask = 0; mask < (1 << n); ++mask) {
t.clear();
for (int i = 0; i < n; ++i) {
if (mask & (1 << i)) {
t.push_back(nums[i]);
}
}
ans.push_back(t);
}
return ans;
}
};