leetcode 77. Combinations

﹏ヽ暗。殇╰゛Y 2022-07-28 01:06 297阅读 0赞

Given two integers n and k, return all possible combinations of k numbers out of 1 … n.

For example,
If n = 4 and k = 2, a solution is:

  1. [
  2. [2,4],
  3. [3,4],
  4. [2,3],
  5. [1,2],
  6. [1,3],
  7. [1,4],
  8. ]
  9. class Solution {
  10. void choose_one(vector<pair<vector<int>, vector<int>>>&candi)
  11. {
  12. vector<pair<vector<int>, vector<int>>>newcandi;
  13. for (int i = 0; i < candi.size(); i++)
  14. {
  15. for (int j = 0; j < candi[i].second.size(); j++)
  16. {
  17. vector<int>bb = candi[i].first;
  18. bb.push_back(candi[i].second[j]);
  19. vector<int>cc = candi[i].second;
  20. cc.erase(cc.begin(), cc.begin() + j + 1);
  21. newcandi.push_back(pair<vector<int>, vector<int>>(bb, cc));
  22. }
  23. }
  24. candi = newcandi;
  25. }
  26. public:
  27. vector<vector<int>> combine(int n, int k) {
  28. vector<vector<int>>re;
  29. vector<int>aa;
  30. if (k == 0)
  31. {
  32. re.push_back(aa);
  33. return re;
  34. }
  35. vector<int>nums;
  36. for (int i = 0; i < n; i++)
  37. nums.push_back(i + 1);
  38. vector<pair<vector<int>, vector<int>>>candi;
  39. candi.push_back(pair<vector<int>, vector<int>>(aa, nums));
  40. int kk = 0;
  41. while (kk < k)
  42. {
  43. choose_one(candi);
  44. kk++;
  45. }
  46. for (int i = 0; i < candi.size(); i++)
  47. re.push_back(candi[i].first);
  48. return re;
  49. }
  50. };

accepted

发表评论

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

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

相关阅读