輸入數字N,求全排列

2022-09-13 05:42:11 字數 766 閱讀 1498

最近遇到乙個演算法題,輸入數字n,求n的全排列:

思路:很容易想到採用遞迴的思想,即n個數,只要前面n-1個數字已經生成的全排列,只用將n插入到這些排列中,生成新的排列順序。

**如下:

def sort_print(datalist, start, end):

if start >= end -1:

print datalist

else:

i = start

for index in range(start, end):

datalist[index], datalist[i] = datalist[i], datalist[index]

sort_print(datalist, start+1, end)

datalist[index], datalist[i] = datalist[i], datalist[index]

def main():

import sys

num = int(sys.stdin.readline().strip())

datalist = [item+1 for item in range(num)]

sort_print(datalist, 0, num)

if __name__ == '__main__':

main()

執行結果:

遞迴求全排列

取出陣列中第乙個元素放到最後,即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 的全排列...

庫函式求全排列

上級排列 prev permutation start,end 求的是當前排列的上乙個排列 對於 上乙個 和 下乙個 它們為字典序的前後,就是對於當前序列pn,他的下乙個序列pn 1,不存在另外的pm,使得pn字典序 不同排列的先後關係是從左 右逐個比較對應的數字的先後來決定的。例如 對於6個數字的...

求全排列 可重複 next permutation

字典序列演算法 字典序列演算法是一種非遞迴演算法。而它正是stl中next permutation的實現演算法。我們來看看他的思路吧 它的整體思想是讓排列成為可遞推的數列,也就是說從前一狀態的排列,可以推出一種新的狀態,直到最終狀態。比如說,最初狀態是12345,最終狀態是54321。其實我覺得這跟...