【演算法】【回溯篇】第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...