直接dfs,注意采用vector的erase和remove
/**
* @author johnsondu
* @time 20:27 8th Oct 2015
* @type dfs
* @url https://leetcode.com/problems/subsets/
* @status Accepted
*/
class Solution {
public:
void dfs(int idx, vector<int> &tmp, vector<vector<int>> &ans, vector<int>& nums)
{
sort(tmp.begin(), tmp.end());
ans.push_back(tmp);
for(int j = idx; j < nums.size(); j ++) {
tmp.push_back(nums[j]);
dfs(j + 1, tmp, ans, nums);
tmp.erase(remove(tmp.begin(),tmp.end(),nums[j]),tmp.end());
}
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> tmp;
ans.push_back(tmp);
if(nums.size() == 0) return ans;
for(int i = 0; i < nums.size(); i ++) {
tmp.push_back(nums[i]);
dfs(i + 1, tmp, ans, nums);
tmp.erase(remove(tmp.begin(),tmp.end(),nums[i]),tmp.end());
}
return ans;
}
};
子集生成DFS算法
本文介绍了一种使用深度优先搜索(DFS)算法生成给定数组所有可能子集的方法。通过递归调用实现子集的生成,并利用vector的erase和remove函数确保不重复添加元素。该算法已通过LeetCode子集问题验证。
399

被折叠的 条评论
为什么被折叠?



