全排列(permutations)
来源:互联网 发布:怎么样成为淘宝客 编辑:程序博客网 时间:2024/05/21 21:50
算法设计时候,递归技巧可以很方便地解决一些复杂的问题。
求一串数字的全排列就可以用递归技巧写出程序。
例如,
[1,2,3] 有下列排列:
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], 和 [3,2,1].
递归过程:
1,为了求[1,2,3]的全排列,可以先求子串[2,3]的全排列,最后将1加到结果中即可
2,求所有子串的全排列,即去掉2求子串[1,3],去掉3求子串[1,2]。
eg:
1开头:字串全排列[2,3],[3,2],得到[1,2,3],[1,3,2]
2开头:子串全排列[1,3],[3,1],得到[2,1,3],[2,3,1]
3开头:子串全排列[1,2],[2,1],得到[3,1,2],[3,2,1]
下面是测试程序:
/** *输出全排列 *[1,2,3]有一下全排列 * [1,2,3],[1,3,2][2,1,3][2,3,1],[3,2,1],[3,1,2] * * *//** *使用递归 * */#include <iostream>#include <vector>using namespace std;class permutations{public: permutations() {} vector<vector<int>> permute(vector<int> &num);};vector<vector<int>> permutations::permute(vector<int> &num){ vector<vector<int>> res; // 递归结束条件,给定的一串数字num只有一个数字,则放入num中并返回结果 if(num.size()==0) { res.push_back(num); return res; } // 当字符串长度>1,递归调用 for(unsigned int i=0;i<num.size();i++) { // 依次次提取数字串中的一个数字,得到剩余数字串 vector<int> subnum(num.begin(),num.end()); subnum.erase(num.begin()+i); // 求剩余数字串的全排列 vector<vector<int>> subres; subres=permute(subnum); // 将剩余数字串的全排列结果每个排列上都添回num[i] for(unsigned int j=0;j<subres.size();j++) { subres[j].insert(subres[j].begin(),num[i]); res.push_back(subres[j]); } } return res;}ostream &operator <<(ostream &o,vector<int> &v){ for(auto e:v) { o<<e<<" "; } return o;}int main(){ vector<int> test_vector{1,2,3}; // 输出test_vector cout<<test_vector; permutations p; vector<vector<int>> res; res=p.permute(test_vector); // output res for(unsigned int i=0;i<res.size();i++) { for(unsigned int j=0;j<res[i].size();j++) { cout<<res[i][j]<<" "; } cout<<endl; } cout << "Hello World!" << endl; return 0;}
0 0
- 全排列生成 Permutations
- 全排列(permutations)
- 全排列Permutations
- LeetCode--Permutations 全排列
- LintCode permutations(全排列)
- LeetCode | Permutations(全排列)
- Permutations 数字的全排列
- LeetCode-46 Permutations(全排列)
- Permutations 全排列生成算法
- LeetCode 46 Permutations (全排列)
- 46. Permutations(全排列)
- Permutations I(II) 数组的全排列
- LeetCode(Permutations) 数列的全排列
- Leetcode:Permutations 数组的全排列
- 46 - Permutations(全排列和递归)
- Leetcode # 46. Permutations 全排列 解题报告
- leetcode之全排列问题(Permutations)
- python 全排列combinations和permutations函数
- 小白学c++之继承、动态绑定
- Unit 3: Subjects
- Unit 3: Verbs
- java.sql.date 跟java.util.date的区别 和怎么在oracle数据库中显示时分秒
- 重装VS2013之后加载opencv项目失败
- 全排列(permutations)
- 备考ocp_ORACLE专题之网络
- xelatex引擎调用系统字体
- Unit 3: Tense, Agreement, Voice; Terminal Punctuation
- 数字在计算机中的表示(原码、反码、补码)个人备忘
- APMserv常见问题
- [HeadFirst] try-catch-finally
- 堆内存和栈内存详解
- 谈谈PBOC3.0中使用的国密SM2算法