77. 组合 - 力扣(LeetCode)

打印 上一主题 下一主题

主题 992|帖子 992|积分 2976

  1. class Solution {
  2. private:
  3.     vector<vector<int>> result;
  4.     vector<int> path;
  5.     void backtracking(int n, int k, int startIndex) {
  6.         if (path.size() == k) {
  7.             result.push_back(path);
  8.             return;
  9.         }
  10.         for (int i = startIndex; i <= n - (k - path.size()) + 1; i++) { // 优化的地方
  11.             path.push_back(i); // 处理节点
  12.             backtracking(n, k, i + 1);
  13.             path.pop_back(); // 回溯,撤销处理的节点
  14.         }
  15.     }
  16. public:
  17.     vector<vector<int>> combine(int n, int k) {
  18.         backtracking(n, k, 1);
  19.         return result;
  20.     }
  21. };
复制代码
  1. #include<iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. vector<int>path;
  5. vector<vector<int>>result;
  6. void backtracking(int n,int k,int startindex)
  7. {
  8.     if(path.size()==k)
  9.     {
  10.         result.push_back(path);
  11.         return ;
  12.     }
  13.     for(int i=startindex;i<=n;i++)
  14.     {
  15.         path.push_back(i);
  16.         backtracking(n,k,i+1);
  17.         path.pop_back();
  18.     }
  19. }
  20. int main()
  21. {
  22.     int n,k;
  23.     cin>>n>>k;
  24.     backtracking(n,k,1);
  25.    
  26.     for (const auto& comb : result)
  27.     {
  28.         for (int num : comb)
  29.         {
  30.             cout << num << " ";
  31.         }
  32.         cout << endl;
  33.     }
  34.    
  35.     return 0;
  36. }
复制代码
 
剪枝操作: 
  1. #include<iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. vector<int>path;
  5. vector<vector<int>>result;
  6. void backtracking(int n,int k,int startindex)
  7. {
  8.     if(path.size()==k)
  9.     {
  10.         result.push_back(path);
  11.         return ;
  12.     }
  13.     for(int i=startindex;i<=n-(k-path.size())+1;i++)
  14.     {
  15.         path.push_back(i);
  16.         backtracking(n,k,i+1);
  17.         path.pop_back();
  18.     }
  19. }
  20. int main()
  21. {
  22.     int n,k;
  23.     cin>>n>>k;
  24.     backtracking(n,k,1);
  25.    
  26.     for (const auto& comb : result)
  27.     {
  28.         for (int num : comb)
  29.         {
  30.             cout << num << " ";
  31.         }
  32.         cout << endl;
  33.     }
  34.    
  35.     return 0;
  36. }
复制代码
输出二维数组
  1. for (auto& j : result)
  2.     {
  3.         for (int i : j)
  4.         {
  5.             cout << i << " ";
  6.         }
  7.         cout << endl;
  8.     }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

滴水恩情

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表