题目:幂集
幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:解集不能包含重复的子集。
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
分析
从题意可以看出是使用回溯思想,由于要求集合中不包含重复的元素,所以可以先把输入集合中重复的元素去掉并且排序,再进行回溯操作,回溯过程中确保始终向后遍历就可以避免出现重复元素。
代码
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
sort(nums.begin(), nums.end());
auto it = std::unique(nums.begin(), nums.end());
nums.resize(std::distance(nums.begin(), it));
vector<int> path;
dfs(nums, 0, path);
return ret;
}
vector<vector<int>> ret;
void dfs(vector<int>& nums, int index, vector<int>& path) {
ret.push_back(path);
if (index == nums.size()) {
return;
}
for (int i = index, size = nums.size(); i < size; ++i) {
path.push_back(nums.at(i));
dfs(nums, i+1, path);
path.pop_back();
}
}
};
网友评论