所謂全排列,就是給定數組,將所有的可能排列組合都枚舉出來,n個元素共有n!種排列組合。
舉例,對於['1', '2', '3'],全排列結果為:123,132,213,231,312,321,共有3!=6種。
很直覺的思路就是從數組中依次挑選一個元素作為第1元素,固定第1元素之后,再將剩下的n-1個元素做全排列。
很顯然這是遞歸的思路,還需要確定跳出條件,這里是只剩下1個元素時,自然就到頭了。
根據這個思路,代碼如下:
from __future__ import print_function
def perm(elem_list, s=''):
# 類型檢查
if type(elem_list) != type([]):
return
# 參數合法性檢查
if len(elem_list) == 0:
return
# 跳出條件
if len(elem_list) == 1:
# 打印當前結果
print(s+elem_list[0])
return
# 依次挑選一個元素作為第1元素
for i,e in enumerate(elem_list):
# 遞歸調用自身,同時傳入當前的前綴字符串
perm(elem_list[:i] + elem_list[i+1:], s+e)
# 測試用例
perm(['1', '2', '3'])
上述代碼的運行結果如下:
123
132
213
231
312
321