第十五周:[leetCode] 90. Subsets II

来源:互联网 发布:皆川纯子 知乎 编辑:程序博客网 时间:2024/05/16 04:48

Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note: The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2], a solution is:

[  [2],  [1],  [1,2,2],  [2,2],  [1,2],  []]

解题思路:寻找数组中不重复的所有子集;可立即反应用深度搜索,通关条件判断除去重复项,dps基本框架为:

void dfs(&nums, start, sub, &res) {    if(condition) return;    else        res.push_back(sub);    for(int i = start; i < nums.size(); i++) {        sub.push_back(nums[i]);        dfs(nums, i + 1, sub, res);        sub.pop_back();    }    return;}

思考通过改变判断条件即可实现输出不重复子集:

void dfs(vector<int>& nums, int start, vector<int> sub, vector<vector<int>>& res){   res.push_back(sub);   for(int i = start; i < nums.size(); i++){       if(i!=start && nums[i] == nums[i-1]) continue;       sub.push_back(nums[i]);       dfs(nums, i+1, sub, res);       sub.pop_back();   }   return;}vector<vector<int>> subsetsWithDup(vector<int>& nums) {   vector<vector<int>> res;   vector<int> sub;   sort(nums.begin(), nums.end());   dfs(nums, 0, sub, res);   return res;}
原创粉丝点击