提交时间:2024-12-01 10:07:09
运行 ID: 188209
#include <iostream> #include <vector> using namespace std; class Solution { public: vector<vector<int>> result; // 存储最终的组合结果 vector<int> path; // 用来存放当前的组合 // 回溯函数 void backtracking(int n, int k, int startindex) { // 如果当前组合的大小等于 k,说明已经找到一个满足条件的组合 if (path.size() == k) { result.push_back(path); // 将当前组合加入结果集 return; } // 从 startindex 开始遍历 for (int i = startindex; i <= n; i++) { path.push_back(i); // 选择当前数字 backtracking(n, k, i + 1); // 递归,搜索下一层 path.pop_back(); // 回溯,撤销当前选择 } } // 主函数,计算从 1 到 n 中选 k 个数的所有组合 vector<vector<int>> combine(int n, int k) { result.clear(); // 清空结果集 path.clear(); // 清空当前组合 backtracking(n, k, 1); // 从 1 开始进行回溯 return result; } }; int main() { Solution sol; int n , k; cin>>n>>k; vector<vector<int>> combinations = sol.combine(n, k); // 输出所有组合 for (const auto& comb : combinations) { for (int num : comb) { cout << num; } cout << endl; } return 0; }