[算法] 求排列组合: 从n个数中任选m个数组成一个新数
生活随笔
收集整理的這篇文章主要介紹了
[算法] 求排列组合: 从n个数中任选m个数组成一个新数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <iostream>
#include <vector>using namespace std;// 求排列組合算法: C(n, m): 從n個數中任選m個數組成一個新的數, 求有多少種組合, 分別是什么
// 從v[]里任選m個元素組成一個組合, 與順序無關
template<class T>
vector<vector<T>> fun(vector<T> v, int m)
{if(v.size() < m)return {}; // 找不到這樣的組合vector<vector<T>> ret;if(v.size() == m) // v[]中任選m個數{ret.push_back(v); // 唯一的一個組合return ret;}else if(m == 1) // v[]中任選1個數{for(auto& it : v){ret.push_back(vector<T> {it});}return ret;}while(v.size() >= m){auto first = v.front();v.erase(v.begin());// 在剩下的v[1~]中任選m-1個數auto res = fun(v, m - 1);for(auto& it : res){it.insert(it.begin(), first);ret.push_back(it);}}return ret;
}int main()
{vector<int> v = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int m = 3;auto res = fun(v, m);for(auto& it : res){for(auto& it2 : it)printf("%d ", it2);printf("\n");}printf("res.size=%d\n", res.size());return 0;
}
總結
以上是生活随笔為你收集整理的[算法] 求排列组合: 从n个数中任选m个数组成一个新数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现栈的基本操作(c语言)
- 下一篇: 记录自己Kettle下载全过程