最近遇到乙個演算法題,輸入數字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。其實我覺得這跟...