虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

您现在的位置是:首页 > 技术阅读 >  每日一题:幂集

每日一题:幂集

时间:2024-02-14



幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。

说明:解集不能包含重复的子集。


示例

输入: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();
}
}
};


更多精彩推荐,请关注我们


代码精进之路



  代码精进之路,我们一起成长!