Python程序员面试分类模拟6.pdfVIP

  • 1
  • 0
  • 约1.24万字
  • 约 14页
  • 2026-03-11 发布于河北
  • 举报

Python程序员面试分类模拟6

简答题

1.设计一个程序,当输入一个字符时,要求输出这个字符的所有排列。

例如输入字符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与h求全排列°

在对字符求全排列的时候就可以采用递归的方式来求解,实现方法如下

图所示:

对F「字符出,通过交换字

通过交换字符的位符的位置呼第一个字符

出的全排列

后面2子字符

的全排列

在使用递归方法求解的时候,需要注意以下两个问题:1()逐渐缩小问题

的规模,并且可以用同样的方法来求解子问题;2()递归一定要有结束条件,否

则会导致程序陷入死循环。本题目递归方法实现代码如下:

并交换字符数组下标为i和j对应的字符

defswaps(tr,i,j):

tmp=str[i]

str[i]=str[j]

str[j]=tmp

〃〃〃

方法功能:对字符中的字符进行全排列

输入参数:str为待排序的字符,start为待排序的子字符的首字符

下标

〃〃//

defPermutation(str,start):

ifstr==Noneorstart:

return

#完成全排列后输出当前排列的字符

ifstart==len(str)-1:

print〃・join(str),

else:

i=start

whileilen(str):

#交换start与i所在位置的字符

swap(str,start,i)

#固定第一个字符,对剩余的字符进行全排列

Permutation(str,start+1)

#还原start与i所在位置的字符

swap(str,start,i)

i+=l

defPermutationtranse(s):

str=list(s)

Permutation(str,)

if_name_二二〃_main—〃:

s=abc

Permutationtranse(s)

程序的运行结果为:

abcacbbacbcacbacab

算法性能分析:

假设这种方法需要的基本操作数为f(n),那么f(n)=n*f(n-l)=n*(n-

l)*f(n-2)-=n!o所以

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档