题意:给出一个集合,求这个集合的所有子集。
思路:DFS,枚举子集的大小。注意剪枝优化,当还要搜索的元素个数小于所需集合的大小时,停止搜索。
class Solution {
public:
vector<int> mm;
vector<vector<int> > re;
vector<vector<int>> subsets(vector<int>& nums) {
mm = nums;
vector<int> temp;
for(int i = 0; i <= nums.size(); i ++) dfs(temp, 0, i);
return re;
}
void dfs(vector<int> rre, int s, int l) {
if(l == 0) {
re.push_back(rre);
return;
}
for(int i = s; i < mm.size(); ++ i) {
if(mm.size() - i < l) return;
rre.push_back(mm[i]);
dfs(rre, i + 1, l - 1);
rre.pop_back();
}
return;
}
};