用递归的方法来实现强大的全排列功能
2014-02-06 01:04
232 查看
题目描述:
输入一行字符串,然后将字符串中的所有字符进行全排列,然后按照从小到大的顺序输出,每个输出占一行。
输入输出示例:
输入数据:
abc
输出数据:
abc
acb
bac
bca
cab
cba
分析:
使用string来保存字符串,便于拆分和分割。使用vector来保存全排列的结果,便于操作和排序。
用户输入一个字符串str,程序的任务是对str求全排列,也就是求str[0]~str[length-1]的全排列
可以分为先求str的第一个字符str[0],然后求str[1]~str[length-1]的全排列,然后将str[0]分别插入到这些全排列的不同的位置中;
然后求str[1]~str[length-1]的全排列,有可以分成先求str[1],然后求str[2]~str[length-1]的全排列,然后将str[1]插入到不同的位置中;
由此得到递归,
求str
~str[length-1]的全排列,分为先求str[n+1]~str[length-1]的全排列,然后将str
分别插入到这个全排列的每个结果的所有的位置;
当n = length -1 的时候,找到递归的出口。
通过递归获得str的全排列,然后通过stl中的sort函数,进行排序。
程序代码:
输入一行字符串,然后将字符串中的所有字符进行全排列,然后按照从小到大的顺序输出,每个输出占一行。
输入输出示例:
输入数据:
abc
输出数据:
abc
acb
bac
bca
cab
cba
分析:
使用string来保存字符串,便于拆分和分割。使用vector来保存全排列的结果,便于操作和排序。
用户输入一个字符串str,程序的任务是对str求全排列,也就是求str[0]~str[length-1]的全排列
可以分为先求str的第一个字符str[0],然后求str[1]~str[length-1]的全排列,然后将str[0]分别插入到这些全排列的不同的位置中;
然后求str[1]~str[length-1]的全排列,有可以分成先求str[1],然后求str[2]~str[length-1]的全排列,然后将str[1]插入到不同的位置中;
由此得到递归,
求str
~str[length-1]的全排列,分为先求str[n+1]~str[length-1]的全排列,然后将str
分别插入到这个全排列的每个结果的所有的位置;
当n = length -1 的时候,找到递归的出口。
通过递归获得str的全排列,然后通过stl中的sort函数,进行排序。
程序代码:
#include<iostream> #include<algorithm> #include<vector> using namespace std; vector<string> fun(string str) { vector<string> v; if(str.length()==1) //递归的出口 { v.push_back(str); return v; } char c = str[0]; string x = str.substr(1); vector<string> t = fun(x); for(int i=0;i<t.size();i++) //n-1个字符的全排列 { for(int j=0;j<= t[i].length();j++)//对于每一种排列情况,"见缝插针" { //将每一个字符串从j处分隔开,然后插入c string temp = t[i].substr(0,j)+c+t[i].substr(j); v.push_back(temp); } } sort(v.begin(),v.end()); return v; } int main() { string str; cin>>str; vector<string> v; v = fun(str); vector<string>::iterator p; for(p=v.begin();p<v.end();p++) { cout<<*p<<endl; } return 0; }
相关文章推荐
- 用递归的方法来实现强大的全排列功能
- 数组全排列---递归方法实现(java)
- PHP实现字符串翻转功能的方法【递归与循环算法】
- python非递归全排列实现方法
- java :非递归方法的二叉搜索树,实现部分功能
- 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- 用C++&递归的方法实现二叉树的基本功能~
- CaptainGan------使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- 全排列的递归实现方法
- C#基于纯数学方法递归实现货币数字转换中文功能详解
- 全排列 递归方法与非递归方法实现
- python递归全排列实现方法
- 强大的功能实现类中的一些常用方法
- C语言经典算法(八)——递归实现斐波那契数列的两种方法
- 用递归的方法实现输出一个十进制数的每一位
- 二叉树先序遍历非递归方法的两种实现
- 用递归实现,显示用1分、2分和5分的硬币凑成1元,一共有多少种方法。
- 《离散数学》用C++实现第二类Stirling数的递归与(非递归)递推的方法 ,并且在实现了s(n-k)=S(n-1,k-1)+k*S(n-1,k)用递归、非递归方式之后,比教两个实验的调试速度、耗时
- ECSHOP全部品牌页实现分页换页功能方法