从整数 1 至 n 中选出 m 个数,按字典序排列输出。
3 2
讯享网
讯享网1 2 1 3 2 3 3
#include<iostream> #include<vector> using namespace std; class Solution {
private: vector<vector<int>> result;//定义一个二维数组存放符合条件结果的集合 vector<int> path;//一维数组,用来存放符合条件的结果 void backtracking(int n, int k, int startIndex) {
if (path.size() == k)//找到了一个子集大小为k的组合 {
result.push_back(path);//用result二维数组,把path保存起来 return;//终止本层递归 } for (int i = startIndex; i <= n - (k - path.size()) + 1; i++) {
path.push_back(i); backtracking(n, k, i + 1); path.pop_back(); } } public: vector<vector<int>> combine(int n, int k) {
backtracking(n, k, 1); return result; } void print() {
for (int i = 0; i < result.size(); i++) {
for (int j = 0; j < result[i].size(); j++) {
cout << result[i][j]; if (j == result[i].size() - 1) cout << endl; else cout << " "; } } cout << result.size() << endl; } }; int main() {
Solution a; int n, k; cin >> n >> k; a.combine(n, k); a.print(); return 0; }
讯享网//这个换行格式真的写了好久 if (j == result[i].size() - 1) cout << endl; else cout << " ";
void print(){
for (int i = 0; i < result.size(); i++){
for (int j = 0; j < result[i].size(); j++) {
cout << result[i][j];//这里只能用result输出,因为path里面是空的 if (j == result[i].size() - 1) cout << endl; else cout << " "; } } cout << result.size() << endl; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/17881.html