题目描述:
设计一个程序,当输入一个字符串时,要求输出这个字符串的所有排列 。 例如输
入字符串 abc, 要求输出由字符 a、 b、 c 所能排列出来的所有字符串: abc,acb,bac,bca, cba ,cab 。
递归法
下面以字符串 abc 为 例介绍对字符串进行全排列的方法 。 具体步骤如下 :
(1)首先固定第一个字符 a,然后对后面的两个字符 b与 c进行全排列:
(2)交换第一个字符与其后面的字符,即交换 a与 b,然后固定第一个字符 b,接着对后面的两个字符 a与 c进行全排列;
(3)由于第( 2)步交换了 a和 b破坏了字符串原来的顺序,因此,需要再次交换 a和 b
使其恢复到原来的顺序,然后交换第一个字符与第三个字符(交换 a和 c),接着固定第一个 字符。对后面的两个字符 a 与 b 求全排列。
在对字符串求全排列的时候就可以采用递归的方式来求解,实现方法如下图所示 :
def swap(str,i,j):tmp=str[i]str[i]=str[j]str[j]=tmp
def Permutation(str,start):if str==None or start<0:returnif start==len(str)-1:print(" ".join(str))else:i=startwhile i
if __name__=='__main__':s='abc'Permutation_transe(s)
输出:
a b c
a c b
b a c
b c a
c b a
c a b