子集問題的三種解法

2021-06-27 17:17:28 字數 1311 閱讀 2966

1. 按目標向量列舉

列舉目標向量每個分量上的可取值

1)全子集

def dfs(x,t,s,start):

print x[:t]

for i in xrange(start,len(s)):

x[t]=s[i]

dfs(x,t+1,s,i+1)

2)特定大小子集

def dfs(x,t,s,start):

if t==len(x):

print x

else:

for i in xrange(start,len(s)):

x[t]=s[i]

dfs(x,t+1,s, i+1)

2.按候選集合列舉

列舉候選集合每個元素取還是不取,同時填充目標向量

1)全子集

def dfs(s,t,x,i):

if t==len(s):

print x[:i]

else:

x[i]=s[t]

dfs(s,t+1,x,i+1)

dfs(s,t+1,x,i)

2)特定大小子集

def dfs(s,t,x,i):

if i==len(x):

print x

else:

x[i]=s[t]

dfs(s,t+1,x,i+1)

if len(s)-t > len(x)-i:

dfs(s,t+1,x,i)

3.動態規劃

第i個元素加入後的子集可以由第i-1個元素加入時的子集生成:f(i) = f(i-1) + for each s in f(i-1) insert a[i-1]

1)全子集

def subset(a):

f =

for i in xrange(len(a)):

f += [x + [a[i]] for x in f]

return f

2)特定大小子集

def subset(s, k):

f=*(k+1)

f[0]=

for i in xrange(1, len(s)+1):

for j in xrange(k, 0,-1):

f[j] = f[j] + [x+[s[i-1]] for x in f[j-1]]

print f[k]

leetcode 78題 子集(c 三種解法)

給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 解題思路1 包含三種解題方法 這個我沒看懂作者本人的解題思路,沒看懂樹是怎麼建的 因此找到了解題思路2 是對...

八皇后問題的三種解法

會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2 b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后...

LetCode PlusOne的三種解法

原題目 given a number represented as an array of digits,plus one to the number.題目的意思是乙個用陣列表示的數字,在加一後仍然用這個陣列表示,加一後位數可能會增加,故最好用vector表示.class plusone priva...