Subsets II--LeetCode

ゝ一纸荒年。 2022-08-07 11:44 219阅读 0赞

题目:

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:

  1. [
  2. [2],
  3. [1],
  4. [1,2,2],
  5. [2,2],
  6. [1,2],
  7. []
  8. ]

思路:和上面一样的思路

  1. vector<vector<int> > v;
  2. vector<vector<int> > subsetsWithDup(vector<int> &S) {
  3. sort(S.begin(),S.end());
  4. generate(vector<int>(), S, 0);
  5. return v;
  6. }
  7. void generate(vector<int> res, vector<int> &S, int i)
  8. {
  9. if(i == S.size())
  10. {
  11. for(int i = 0; i < v.size(); i++)
  12. {
  13. if(v[i] == res)
  14. {
  15. return;
  16. }
  17. }
  18. v.push_back(res);
  19. return;
  20. }
  21. else
  22. {
  23. generate(res, S, i+1);
  24. res.push_back(S[i]);
  25. generate(res, S, i+1);
  26. }
  27. }

或者将上面的一个helpr函数替换

  1. void helper_array(vector<int>& vec,int begin,int& k,vector<int>& com)
  2. {
  3. if(begin >= vec.size() || k <0)
  4. return ;
  5. com.push_back(vec[begin]);
  6. k--;
  7. if(k == 0)
  8. {
  9. int i;
  10. for(i=0;i<com.size();i++)
  11. cout<<com[i]<<" ";
  12. cout<<endl;
  13. }
  14. helper_array(vec,begin+1,k,com);
  15. com.pop_back();
  16. k++;
  17. int i;
  18. for(i=begin+1;i<vec.size();)
  19. {
  20. if(vec[i] == vec[begin])
  21. i++;
  22. else
  23. break;
  24. }
  25. helper_array(vec,i,k,com);
  26. }

发表评论

表情:
评论列表 (有 0 条评论,219人围观)

还没有评论,来说两句吧...

相关阅读