本文主要是介绍[LeetCode]90.Subsets II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
Given a collection of integers that might contain duplicates, S, return all possible subsets.
Note:
Elements in a subset must be in non-descending order.
The solution set must not contain duplicate subsets.
For example,
If S = [1,2,2], a solution is:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
思路
和78.Subsets的唯一区别就是添加了两行去重的代码。
代码
/**------------------------------------* 日期:2015-03-01* 作者:SJF0115* 题目: 90.Subsets II* 网址:https://oj.leetcode.com/problems/subsets-ii/* 结果:AC* 来源:LeetCode* 博客:---------------------------------------**/#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public:vector<vector<int> > subsetsWithDup(vector<int> &S) {int size = S.size();vector<vector<int> > result;vector<int> path;// 排序sort(S.begin(),S.end());// 空集result.push_back(path);// 其他子集for(int i = 1;i <= size;++i){DFS(S,size,i,0,path,result);}//forreturn result;}private:// s源数据集 n源数据个数 k子集长度 index为第index个元素 path路径 result最终结果void DFS(vector<int> &s,int n,int k,int index,vector<int> &path,vector<vector<int> > &result){// 一个子集if(path.size() == k){result.push_back(path);return;}//iffor(int i = index;i < n;++i){// 去重if(i != index && s[i] == s[i-1]){continue;}//ifpath.push_back(s[i]);DFS(s,n,k,i+1,path,result);path.pop_back();}//for}};int main(){Solution s;vector<int> num = {1,2,2};vector<vector<int> > result = s.subsetsWithDup(num);// 输出for(int i = 0;i < result.size();++i){for(int j = 0;j < result[i].size();++j){cout<<result[i][j]<<" ";}//forcout<<endl;}//forreturn 0;}
运行时间
这篇关于[LeetCode]90.Subsets II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!