全排列问题

Posted zs-learn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全排列问题相关的知识,希望对你有一定的参考价值。

  给定一个无重复数字的序列,返回这些数所能排列出的所有序列。

  方法一:

  首先求出所有可能出现在第一个位置的字符,即把第一个字符和后面所有字符进行交换(自己本身进行交换也是其中一种);

  然后把后面的字符继续分成两部分,将第一个字符与后面字符进行交换(包括字符本身),终止条件是:字符长度为1,无法进行交换。

技术分享图片

 

  方法2:

  采用一个一个向中间集添加元素的方法,递归终止条件是传入的待递归的列表长度为1。

  此种方法的优点是无需交换,因此此种方法稍加改变就可以用于字符串的排列问题,因为在python中字符串属于不可变类型,如果字符按序输入的话,最终输出的排列也是按照字典序输出的。

 技术分享图片

  方法三:

  引入itertools库

技术分享图片

 

 

  

以上是关于全排列问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言数字全排列的问题(急!!)求C代码和算法

c++ 全排列问题

java实现全排列问题

一文搞懂全排列组合子集问题(建议收藏)

带重复的全排列问题

全排列问题的递归算法(Perm)