Python迴圈實現n的全排列功能

2022-09-27 08:06:13 字數 1326 閱讀 4584

描述:

輸入乙個大於0的整數n,輸出1到n的全排列:

例如:n=3,輸出[[3, 2, 1], [2, 3, 1], [2, 1, 3], [3, 1, 2], [1, 3, 2], [1, 2, 3]]

n=4,輸出[[4, 3, 2, 1], [3, 4, 2, 1], [3, 2, 4, 1], [3, 2, 1, 4], [4, 2, 3, 1], [2, 4, 3, 1], [2, 3, 4, 1], [2, 3, 1, 4], [4, 2, 1, 3],

[2, 4, 1, 3], [2, 1, 4, 3], [2, 1, 3, 4], [4, 3, 1, 2], [3, 4, 1, 2], [3, 1, 4, 2], [3, 1, 2, 4], [4, 1, 3, 2], [1, 4, 3, 2],

[1, 3, 4, 2], [1, 3, 2,vunexlg 4], [4, 1, 2, 3], [1, 4, 2, 3], [1, 2, 4, 3], [1, 2, 3, 4]]

思路:為1時,結果為1

為2時,結果就是兩種:1,2 2,1(1的前後插入)

為3時,結果就是六種:1,2,3 1,3,2 3,2,1 (1,2的前中後插入)

3,2,1 2,3,程式設計客棧1 2,1,3 (2,1的前中後插入)

**:im程式設計客棧程式設計客棧port copy

def full_arrange(n):

data = # 中間結果

res = # 最終結果

if n == 1 :

return 1

res = [[1]]vunexlg

for i in range(2, n+1):

for j in range(len(res)): # 遍歷res陣列(二維陣列)

for x in range(len(res[j])+1): # 遍歷res陣列中的元素(一維陣列)

data = copy.copy(res[j]) # 淺拷貝

data.insert(x,i) # 在一維陣列的不同位置插入元素,獲得新的陣列

res.append(data)

x += 1

j += 1

# 刪除多餘陣列(原始陣列) 最後保留的資料(一維陣列的長度) == i

while true:

if len(res[0]) != i:

res.remove(res[0])

else:

break

i += 1

return res

print(full_arrange(n))

總結本文標題: python迴圈實現n的全排列功能

本文位址:

python實現全排列

有1,2,3,4這4個數字,能組成多少個互不相同且無重複數字的三位數,下面是二種解決示例,需要的朋友可以參考下 第一種方法 遞迴 複製 如下 def perms elements if len elements 1 yield elements else for perm in perms elem...

N個數的全排列

我採用的方法是類似密碼箱的轉輪來得到所有的排列組合 比如求 1,2,3,4的所有排列組合 採用遞減式輪轉來生成 n 4 以1234為初始值 得到如下的所有4個組合,放入最終的容器中 1 2 3 4 2 3 4 1 3 4 1 2 4 1 2 3 n 3 以上面的四個作為初始值,在第三位開始輪轉 得到...

遞迴實現全排列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...