演算法 回溯篇 第4節 全排列問題

2021-10-05 08:15:39 字數 2004 閱讀 3144

【演算法】【回溯篇】第1節:八皇后問題

【演算法】【回溯篇】第2節:解數獨問題

【演算法】【回溯篇】第3節:正規表示式問題

【演算法】【回溯篇】第4節:全排列問題

【演算法】【回溯篇】第5節:組合問題

【演算法】【回溯篇】第6節:子集問題

【演算法】【回溯篇】第7節:0-1揹包問題

給定乙個 沒有重複 數字的序列,返回其所有可能的全排列。

示例:輸入:[1

,2,3

] 輸出:[[

1,2,

3],[

1,3,

2],[

2,1,

3],[

2,3,

1],[

3,1,

2],[

3,2,

1]]

class

allpermutation()

:def

__init__

(self, array)

: self.arr = array

self.size =

len(self.arr)

self.res =[-

1]* self.size # 記錄當前排列

self.ans =

self.visited =[0

]* self.size # 記錄每個數字的被訪問情況

defall_permutation

(self, index=0)

:"""回溯的主邏輯"""

if index == self.size:

# 找到乙個排列

list

(self.res)

)return

for i, v in

enumerate

(self.arr)

:# 每乙個給位置都有三種可能

ifnot self.visited[i]

:# 當前位置未被訪問過

self.res[index]

= v self.visited[i]=1

self.all_permutation(index +1)

self.visited[i]=0

# 由於回溯過程對三個二維陣列進行了修改,故回溯完成需要對稱復原。

defmain()

: ap = allpermutation([1

,2,3

])ap.all_permutation(

)print

(ap.ans)

if __name__ ==

'__main__'

: main(

)

執行結果

[[1

,2,3

],[1

,3,2

],[2

,1,3

],[2

,3,1

],[3

,1,2

],[3

,2,1

]]

題目描述

給定乙個可包含重複數字的序列,返回所有不重複的全排列。

示例:輸入:[1

,1,2

] 輸出:[[

1,1,

2],[

1,2,

1],[

2,1,

1]]

解決方案:

基於上文**,僅需修改一行即可(即在計算的時候,判斷當前排列是否已經出現過。):

# if index == self.size:  # 找到乙個排列(舊)

if index == self.size and self.res not

in self.ans:

# 找到乙個排列(新)

list

(self.res)

)return

python回溯演算法全排列 回溯演算法 全排列

1 問題描述 對於給定的集合 a,其中的 n 個元素互不相同,如何輸出這 n 個元素的所有排列 全排列 時間複雜度為o 2n 例如 全排列 2 回溯演算法思想 這裡以 a 為例,來說明全排列的生成方法,對於這個集合,其包含 3 個元素,所有的排列情況有 3 6 種,對於每一種排列,其第乙個元素有 3...

回溯演算法 全排列

1 問題描述 對於給定的集合 a,其中的 n 個元素互不相同,如何輸出這 n 個元素的所有排列 全排列 時間複雜度為o 2n 例如 全排列 2 回溯演算法思想 這裡以 a 為例,來說明全排列的生成方法,對於這個集合,其包含 3 個元素,所有的排列情況有 3 6 種,對於每一種排列,其第乙個元素有 3...

回溯演算法 素數環 全排列

time 2020 11 25 author jimou chen from math import sqrt n int input num 0 for in range n 1 flag 0 for in range n 1 判斷素數 def prime x for i in range 2,i...