Subsets--LeetCode

╰半橙微兮° 2022-08-07 11:44 225阅读 0赞

题目:

Given a set of distinct integers, 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,3], a solution is:

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

思路:第一个使用组合的思想,从这个数组中挑选出1,2,3,…n个元素的组合

第二个思想是递归,这个元素放或者不放

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <algorithm>
  5. using namespace std;
  6. void helper(vector<int>& vec,int begin,int& num,vector<int>& subset)
  7. {
  8. if(begin >= vec.size() || num<0 )
  9. return ;
  10. subset.push_back(vec[begin]);
  11. num--;
  12. if(num == 0)
  13. {
  14. int i;
  15. for(i=0;i<subset.size();i++)
  16. cout<<subset[i]<<" ";
  17. cout<<endl;
  18. }
  19. helper(vec,begin+1,num,subset);
  20. subset.pop_back();
  21. num++;
  22. helper(vec,begin+1,num,subset);
  23. }
  24. void Combination(vector<int>& vec,int k)
  25. {
  26. if(vec.size()==0 || k <0)
  27. return ;
  28. vector<int> subset;
  29. sort(vec.begin(),vec.end());
  30. helper(vec,0,k,subset);
  31. }
  32. void Subsets(vector<int>& vec)
  33. {
  34. int i;
  35. for(i=0;i<=vec.size();i++)
  36. Combination(vec,i);
  37. }
  38. void generate(vector<int> res, vector<int> &S, int i)
  39. {
  40. if(i == S.size())
  41. {
  42. for(int j=0;j<res.size();j++)
  43. cout<<res[j]<<" ";
  44. cout<<endl;
  45. //return;
  46. }
  47. else
  48. {
  49. generate(res, S, i+1);
  50. res.push_back(S[i]);
  51. generate(res, S, i+1);
  52. }
  53. }
  54. void SubsetSecond(vector<int>& vec)
  55. {
  56. if(vec.size()<=0)
  57. return;
  58. sort(vec.begin(),vec.end());
  59. vector<int> result;
  60. generate(result,vec,0);
  61. }
  62. int main()
  63. {
  64. int array[]={1,2,3};
  65. vector<int> vec(array,array+sizeof(array)/sizeof(int));
  66. SubsetSecond(vec);
  67. return 0;
  68. }

发表评论

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

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

相关阅读