#!/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...