怎样输出几个数的全排列呢?(C++编程实现)
来源:互联网 发布:淘宝店的等级划分 编辑:程序博客网 时间:2024/06/07 14:51
第一种方法,比较简单,借助于STL库中的next_permutation函数。next_permutation的作用就是计算全排列。
示例:输出整数数组array的全排列
第二种方法,不用STL库,改用递归的思想来实现。
示例:输出字符串str中各个字符的全排列(数组与此类似,这里给出针对字符串的代码)
---------------
今天又看到此文,动手又实践了一下,
输出几个数的全排列:
(调用示例:vector<string> rst; testAllPermutations("", "abc", rst);)
//列出全排列void testAllPermutations(const string& preStr, const string& nextArr, vector<string>& retVec){ if(nextArr.length() == 1) { retVec.push_back(nextArr); return; } for (unsigned int i = 0; i < nextArr.length(); ++i) { string now(1, nextArr[i]); string next(nextArr); next = next.erase(i, 1); vector<string> retVal; testAllPermutations(now, next, retVal); for(unsigned int j = 0; j < retVal.size(); ++j) { retVec.push_back(now+retVal[j]); } }}
在此基础上,输出几个数的所有的可能组合:
//列出所有可能的组合void testAllCombination(const string& preStr, const string& nextArr, vector<string>& retVec){ if(preStr.length() == 0) { //初始时将单字符组合形式记录下来 for (unsigned int t = 0; t < nextArr.length(); ++t) { retVec.push_back(string(1, nextArr[t])); } } if(nextArr.length() == 1) { retVec.push_back(nextArr); retVec.push_back(""); return; } for (unsigned int i = 0; i < nextArr.length(); ++i) { string now(1, nextArr[i]); string next(nextArr); next = next.erase(i, 1); vector<string> retVal; testAllCombination("", next, retVal); //首参数传空 for(unsigned int j = 0; j < retVal.size(); ++j) { retVec.push_back(now+retVal[j]); } }}不过,这样最后计算的结果,数据会有一定重复,过滤一下就OK。
- 怎样输出几个数的全排列呢?(C++编程实现)
- 输出一个数的全排列
- 输出一个数n的全排列
- hdu 1716 排列2 输出几个数字的全排列
- 算法 - 输出一个字符串的全排列(C++)
- c语言编程实现数字全排列
- 排列数(输出0~9的全排列)-蓝桥杯算法提高
- 使用递归实现数的全排列
- 递归实现数的全排列
- 输出一个数全排列的组合【利用哈密尔顿图遍历算法实现】
- 全排列的输出
- 编程实现全排列
- 非递归实现输出全排列(或部分排列)
- 数的全排列
- 数的全排列
- 数的全排列
- 数的全排列
- 数的全排列
- 心情
- 关于STL list::sort
- Tomcat6.0配置数据库连接池
- 为mandriva 2010 spring打包(geany-0.19.2)
- 雷人
- 怎样输出几个数的全排列呢?(C++编程实现)
- 自我扫盲的一些心情
- How to RESOLVE a breakpoint on a managed Main method.
- EXT的form表单提交方式总结
- 数据
- "使用 Windows 身份验证"连接 SQL Server 失败
- 再谈OAuth和Connect
- 求一款验证码的程序
- 每日一题:查找数组中最大最小值