python 全排列問題的遞迴解法

2021-09-26 01:29:19 字數 1000 閱讀 9829

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @time : 2019/8/8 0008 20:35

# @author : joker-syc

# @site :

# @file : 全排列問題的解法.py

# @software: pycharm

'''輸入乙個字串,列印出該字串中字元的所有排列。

例如輸入字串abc,則輸出由字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、cab和cba。'''

#遞迴解法(沒必要去關注其所有過程,只需要知道把'指標'移動到下一位,並交給問題規模更小的函式就行,最後要在函式出來之後恢復arr即可)

defdd

(arr,position,end)

:if position==end:

print

(arr)

else

:for index in

range

(position,end)

: arr[index]

,arr[position]

=arr[position]

,arr[index]

#一開始不交換,回溯時,將arr恢復

dd(arr,position+

1,end)

#說實話,我還是不怎麼懂為啥交換交換就可以得出正確答案(反正這裡是用了遞迴回溯)

arr[index]

,arr[position]

=arr[position]

,arr[index]

#在遞迴的一開始,這句是不起作用的,一直到回溯時,交換位置

arr=

['a'

,'b'

,'c'

,'d'

]dd(arr,0,

len(arr)

)

全排列問題(遞迴)

上次上課老師講了全排列演算法,現在剛剛看自己的寫的全排列演算法,看了好一會才看懂。應該是自己理解的不夠徹底 所以今天徹徹底底的來分析一下 先看圖 思路 先固定乙個字元,然後將固定的字元與它後面的每乙個進行交換,一直遞迴下去,直到固定的字元後面只有乙個字元 我們先看看圖,框外面的字元是被固定的字元,框...

排列問題(全排列的遞迴演算法問題)

題目 設計乙個遞迴演算法生成n個元素的全排列。演算法講解 設r 是要進行排列的n個元素,ri r 集合x中元素的全排列記為perm x ri perm x 表示在全排列perm x 的每乙個排列前加上字首得到的排列。r的全排列可歸納定義如下 當n 1時,perm r r 其中r是集合r中唯一的元素 ...

遞迴求解全排列問題

遞迴求解全排列問題 求解思想 排列中每乙個數字,都有一次當最前單一綴的機會,例如 排列陣列 a 1.當a中只有1個數字的時候,a 1 則只有1個數字做單一字首和字尾,則只有一種 1!1 可能 a1,直接輸出 2.當a中只有2個數字的時候,a 2 則a1,a2分別有一次機會做單一字首的機會,2!2 3...