這裡有乙個回溯函式,使用第乙個整數的索引作為引數 backtrack(first)。
1,如果第乙個整數有索引 n,意味著當前排列已完成。
2,遍歷索引 first 到索引 n-1 的所有整數 ,則:
在排列中放置第 i 個整數,即 swap(nums[first], nums[i])
繼續生成從第 i 個整數開始的所有排列:backtrack(first +1)
現在回溯,通過 swap(nums[first], nums[i]) 還原。
class solution:
def permute(self, nums):
""":type nums: list[int]
:rtype: list[list[int]]
"""def backtrack(first = 0):
# if all integers are used up
if first == n:
for i in range(first, n):
# place i-th integer first
# in the current permutation
nums[first], nums[i] = nums[i], nums[first]
# use next integers to complete the permutations
backtrack(first + 1)
# backtrack
nums[first], nums[i] = nums[i], nums[first]
n = len(nums)
output =
backtrack()
return output
class solution:
def solvepermutation(self, array):
self.helper(array, )
def helper(self, array, solution):
if len(array) == 0:
print(solution)
return
for i in range(len(array)):
newarray = array[:i] + array[i + 1:] # 刪除書本
newsolution = solution + [array[i]] # 加入新書
self.helper(newarray, newsolution) # 尋找剩餘物件的排列組合
solution().solvepermutation(["紅", "黃", "藍", "綠"])
li = ['a', 'b', 'c', 'd']
def solutoin(li):
import itertools
res = list(itertools.permutations(li))
return len(res)
例題:
小明想上兩門選修課,他有四種選擇:a微積分,b**,c烹飪,d設計,小明一共有多少種不同的選課組合?
li = ['a', 'b', 'c', 'd']
def solutoin(li):
import itertools
res = list(itertools.permutations(li, 2))
return len(res)
class solution():
def solvecombination(self, array, n):
self.helper(array, n, )
def helper(self, array, n, solution):
if len(solution) == n:
print(solution)
return
for i in range(len(array)):
newarray = array[i + 1:] # 建立新的課程列表,更新列表,即選過的課程不能再選
newsolution = solution + [array[i]] # 將科目加入新的列表組合
self.helper(newarray, n, newsolution)
solution().solvecombination(["a", "b", "c", "d"], 2)
排列組合與回溯演算法
排列組合與回溯演算法 在開始之前,我們先應該看一下回溯演算法的概念,所謂回溯 就是搜尋一棵狀態樹的過程,這個過程類似於圖的深度優先搜尋 dfs 在搜尋的每一步 這裡的每一步對應搜尋樹的第i層 中產生乙個正確的解,然後在以後的每一步搜尋過程中,都檢查其前一步的記錄,並且它將有條件的選擇以後的每乙個搜尋...
排列組合與回溯演算法
排列組合與回溯演算法 kuibing 感謝bamboo leemars的幫助 關鍵字 遞迴dfs 前言 這篇 主要針對排列組合對回溯演算法展開討論,在每乙個討論之後,還有相關的推薦題。在開始之前,我們先應該看一下回溯演算法的概念,所謂回溯 就是搜尋一棵狀態樹的過程,這個過程類似於圖的深度優先搜尋 d...
排列組合 隔板法
1 定義 隔板法就是在n個元素間插入 b 1 個板,即把n個元素分成b組的方法。c n 1,b 1 2 條件 隔板法必須滿足三個條件 1 這n個元素必須相同,2 所分成的每一組至少分得乙個元素,3 分成的組別彼此差異。3 示例 1 例如 某校組建一球隊需16人,該校共10個班級,且每個班至少分配乙個...