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...