面試 阿里 Python遞迴實現全排列

2021-08-17 07:39:01 字數 2768 閱讀 2976

題1: 對乙個字串如s="abcd"裡的元素進行全排列。

def r(s, start,end):

if start >= end:

print(s)

else:

for i in range(start,end):

s[start],s[i] = s[i],s[start]

r(s, start+1, end)

s[start], s[i] = s[i], s[start]

s="abcd"

r(list(s),0,len(s))

輸出結果:

['a', 'b', 'c', 'd']

['a', 'b', 'd', 'c']

['a', 'c', 'b', 'd']

['a', 'c', 'd', 'b']

['a', 'd', 'c', 'b']

['a', 'd', 'b', 'c']

['b', 'a', 'c', 'd']

['b', 'a', 'd', 'c']

['b', 'c', 'a', 'd']

['b', 'c', 'd', 'a']

['b', 'd', 'c', 'a']

['b', 'd', 'a', 'c']

['c', 'b', 'a', 'd']

['c', 'b', 'd', 'a']

['c', 'a', 'b', 'd']

['c', 'a', 'd', 'b']

['c', 'd', 'a', 'b']

['c', 'd', 'b', 'a']

['d', 'b', 'c', 'a']

['d', 'b', 'a', 'c']

['d', 'c', 'b', 'a']

['d', 'c', 'a', 'b']

['d', 'a', 'c', 'b']

['d', 'a', 'b', 'c']

全排列結果數:

題2:排列:從n個元素中任取m個元素,並按照一定的順序進行排列,稱為排列;

全排列:當n==m時,稱為全排列;

比如:集合的全排列為:

遞迴思想:

取出陣列中第乙個元素放到最後,即a[1]與a[n]交換,然後遞迴求a[n-1]的全排列

1)如果陣列只有乙個元素n=1,a= 則全排列就是

2)如果陣列有兩個元素n=2,a= 則全排列是:

--a[1]與a[2]交換。交換後求a[2-1]=的全排列,歸結到1)

--a[2]與a[2]交換。交換後求a[2-1]=的全排列,歸結到1)

3)如果陣列有三個元素n=3,a= 則全排列是

,1}--a[1]與a[3]交換。後求a[3-1]=的全排列,歸結到2)

,2)--a[2]與a[3]交換。後求a[3-1]=的全排列,歸結到2)

,3)--a[3]與a[3]交換。後求a[3-1]=的全排列,歸結到2)

...依此類推。

利用python實現全排列的具體**perm.py如下:

[python] view plain

copy

count=0  

defperm(n,begin,end):  

globalcount  

ifbegin>=end:  

printn  

count +=1  

else:  

i=begin  

fornuminrange(begin,end):  

n[num],n[i]=n[i],n[num]  

perm(n,begin+1,end)  

n[num],n[i]=n[i],n[num]  

n=[1,2,3,4]  

perm(n,0,len(n))  

printcount  

最後輸出的結果如下:

[plain] view plain

copy

********************==== restart: d:/python27/perm.py ********************====  

[1, 2, 3, 4]  

[1, 2, 4, 3]  

[1, 3, 2, 4]  

[1, 3, 4, 2]  

[1, 4, 3, 2]  

[1, 4, 2, 3]  

[2, 1, 3, 4]  

[2, 1, 4, 3]  

[2, 3, 1, 4]  

[2, 3, 4, 1]  

[2, 4, 3, 1]  

[2, 4, 1, 3]  

[3, 2, 1, 4]  

[3, 2, 4, 1]  

[3, 1, 2, 4]  

[3, 1, 4, 2]  

[3, 4, 1, 2]  

[3, 4, 2, 1]  

[4, 2, 3, 1]  

[4, 2, 1, 3]  

[4, 3, 2, 1]  

[4, 3, 1, 2]  

[4, 1, 3, 2]  

[4, 1, 2, 3]  

24  

>>>   

遞迴實現全排列python

1.保持a不動,動bcd 2.保持b不動,動cd 3.保持c不動,動d def pailie head string if len string 1 for father string in string pailie head father string,string.replace father...

使用Python遞迴實現全排列

1 確定兩個列表 2 乙個列表是用來存放需要全排列的數 3 另乙個列表是用來存放已經排列好的數 4 將上面兩個列表不斷進行遞迴 5 最後結果列表裡新增的是最後排列好的列表 import math import copy 定義全排列的函式 defpermutation need perm,alread...

python遞迴全排列實現方法

排列 從n個元素中任取m個元素,並按照一定的順序進行排列,稱為排列 全排列 當n m時,稱為全排列 比如 集合的全排列為 www.cppcns.com 遞迴思想 取出陣列中第乙個元素放到最後,即a 1 與a n 交換,然後遞迴求a n 1 的全排列 1 如果陣列只有乙個元素n 1,a 則全排列就是 ...