中文JAVA技术平等自由协作创造

Java专题文章博客和开源

常用链接

统计

最新评论

用递归的方法来实现强大的全排列功能

  题目描述:

  输入一行字符串,然后将字符串中的所有字符进行全排列,然后按照从小到大的顺序输出,每个输出占一行。

  输入输出示例:

  输入数据:

  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[n]~str[length-1]的全排列,分为先求str[n-1]~str[length-1]的全排列,然后将str[n]分别插入到这个全排列的每个结果的所有的位置;

  当n = length -1 的时候,找到递归的出口。

  通过递归获得str的全排列,然后通过stl中的sort函数,进行排序。

  程序代码:

  #include<IOSTREAM>

  #include

  #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++) cin str; string { main() int } v; return sort(v.begin(),v.end()); v.push_back(temp); temp="t[i].substr(0,j)+c+t[i].substr(j);" 将每一个字符串从j处分隔开,然后插入c 对于每一种排列情况,?见缝插针? t[i].length();j++) j="0;j<=" for(int n-1个字符的全排列》str;

  vector<STRING> v;

  v = fun(str);

  vector<STRING>::iterator p;

  for(p=v.begin();p<V.END();P++) { } return pre }< 0; cout《*p《endl;><BR>

  <P></P>

  ?? 托福答案  www.qcwyo68.com

posted on 2014-02-12 18:15 好不容易 阅读(134) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
PK10开奖 PK10开奖