zoukankan      html  css  js  c++  java
  • 全排列问题(内测第0届第1题)

    题目要求

           问题描述:输入一个可能重复的英文字符串(以逗号作为结束标记),按字典顺序无重复输出其所有可能的排列方式。

           样例输入1:abc,

           样例输出1:abc  acb  bac  bca  cab  cba

           样例输入2:cab,

           样例输出2:abc  acb  bac  bca  cab  cba

           样例输入3:abb,

           样例输出3:abb  bab  bba

     解决方案

           这个问题属于全排列问题,而且需要解决两个问题:第一是按字典顺序输出,第二是无重复输出。为了保证字典顺序输出,需要对输入的字串先进行一次排序,以便于之后的操作。为了保证无重复输出,需要在输出时判断当前情形是否输出过,这一点在保证字典顺序的情况下很好判断。

           另外,全排列的一个重要思想是递归。要想计算abc的全排列,只需先让a为首,然后计算bc的全排列,再与a一起输出,然后让b为首,计算ac的全排列,最后让c为首,计算ab的全排列。每个字母为首完毕,都要恢复到对应的初始状态,以abc为例,它的调用状态如下:

    源码示例

    结果展示

    小结

           全排列,关键是先递归排列后面的,然后再排列前面的。注意for循环与递归的联合使用。

  • 相关阅读:
    [原创]平面机器人的避障策略思考
    做个快乐的程序员
    [知识]双音多频(DTMF)信号
    osg 关于LOD
    (3)vtkMapper
    关于坐标系,关于矩阵及线性相关和无关的关系
    osg找不到插件的解决办法
    逆风飞扬,吴仁宏
    整合qt设计师和vs2008出了点问题,记下来
    关于NodeVisitor访问者模式
  • 原文地址:https://www.cnblogs.com/kangjianwei101/p/5220618.html
Copyright © 2011-2022 走看看