題目
列表arr =[1,2,3]輸出其全排列。
思路
采取遞歸推導的方法來實現。
- 遞歸出口:如果列表長度為1,返回[arr]
- 推導策略:
- 選取第一個為基准數,如1,獲取上層(剩余部分)的推導結果,如[[2,3], [3,2]]
- 遍歷上層推導結果,復制一份,並將1依次插入列表的從頭到尾處,如組合[2,3]得到[1,2,3],[2,1,3],[2,3,1]
代碼實現
def perm(arr):
"""實現全排列"""
length = len(arr)
if length == 1: # 遞歸出口
return [arr]
result = [] # 存儲結果
fixed = arr[0]
rest = arr[1:]
for _arr in perm(rest): # 遍歷上層的每一個結果
for i in range(0, length): # 插入每一個位置得到新序列
new_rest = _arr.copy() # 需要復制一份
new_rest.insert(i, fixed)
result.append(new_rest)
return result
if __name__ == '__main__':
r = perm([1,2,3])
for i in r:
print(i)
輸出結果
[1, 2, 3]
[2, 1, 3]
[2, 3, 1]
[1, 3, 2]
[3, 1, 2]
[3, 2, 1]