python全排列和子集

2021-08-30 21:53:21 字數 1357 閱讀 9917

#獲取全集

def get_all_set(list,cur=0):

global result2

if cur==len(result2) :

print(result2)

return

for each in list:

if each not in result2[:cur]:#如果下乙個元素不在前面已經出現的元素裡面

result2[cur]=each #把元素加入到result2裡面

get_all_set(list=list,cur=cur+1)#尋找下乙個元素

if __name__=='__main__':

list=['a','b','c','d']

result2=[none]*len(list)

get_all_set(list=list)

也可以用python的內建模版itertools解決

from itertools import combinations,permutations

if __name__=='__main__':

a = ['a', 'b', 'c', 'd']

print(list(permutations(a, 4)))# 全集

#獲取list的子集個數

def get_son_set(list):

global result

if len(list)<=2:

return

for i in range(len(list)):

first=list[i]

last=list[:i]+list[i+1:]

if [first] not in result:

if last not in result:

get_son_set(list=last)

if __name__=='__main__':

result=

get_son_set(list=[1,2,3,4])

print(result)

也可以用python的內建模版itertools解決

from itertools import combinations,permutations

if __name__=='__main__':

for i in range(1,len(a)): #子集

for each in combinations(a,i):

print(list(each))

3.實現的思路大致是dfs,理解後不斷將問題拆分,除錯**,然後就很容易做出來了

子集和全排列問題

列出所有子集 採用列出2進製數的方法 問題描述 列出給定集合的所有子集合,包括空子集。思路 乙個集合的所有子集合的個數是 11111 01111 1 11111 10000 當這個數加1時,如果當前位是1,那麼當前位就變成0並且向前進1位 接著前一位如果是1,也會變成0並且繼續進製 以此類推,直到遇...

全排列 全排列ii 子集 子集ii

2 全排列ii 3 子集 4 子集ii 5 資料排列 解題步驟 首先,要通過讀題完成下面三個步驟 1 描述解的形式,定義乙個解空間,它包含問題的所有解。2 構造狀態空間樹。3 構造約束函式 用於殺死節點 標準回溯模板 回溯演算法,複雜度較高,因為回溯演算法就是暴力窮舉,遍歷整顆決策樹是不可避免的 r...

求子集 全排列

求子集 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 思路 1 確定乙個tags標記陣列,用於確定某個元素是否被選擇 2 確定遞迴的終止條件為 確定元素是...