演算法總結 排列組合

2021-10-25 05:33:38 字數 2379 閱讀 7176

[46] 全排列

關鍵點:使用used記錄已使用的用數字

class

solution

:def

permute

(self, nums: list[

int])-

> list[list[

int]]:

self.res =

self.used =

[false]*

len(nums)

self.generatearrange(nums,0,

)return self.res

defgeneratearrange

(self, nums: set[

str]

, count, path: list[

str]):

if count ==

len(nums)::

])return

for i in

range

(len

(nums)):

ifnot self.used[i]:)

self.used[i]

=true

self.generatearrange(nums, count+

1, path)

path.pop(

) self.used[i]

=false

return

[77] 組合

關鍵點1:start記錄當前,開始的點

關鍵點2:遞迴時,start+1跳過當前點

class

solution

:def

combine

(self, n:

int, k:

int)

-> list[list[

int]]:

self.res =

self.generatecombine(n, k,1,

)return self.res

defgeneratecombine

(self, n, k, start, p):if

len(p)

== k::]

)return

# 還有k - p.size()個空位, 所以[i...n]中至少要有k-p.size()個元素

# i最多為n-(k-len(p))+1

max_i = n-

(k-len

(p))+1

for i in

range

(start, max_i +1)

: self.generatecombine(n, k, i+

1, p)

p.pop(

)return

[40] 組合總和 ii

關鍵點1:使用counter記錄所有數字出現的次數,並且通過次數判斷當前數字是否使用完。

關鍵點2:start從自身開始,包括自身,此關鍵點主要針對:找出所有相加之和為 n 的 k 個數的組合這類問題

class

solution

:def

combinationsum2

(self, candidates: list[

int]

, target:

int)

-> list[list[

int]]:

self.res =

self.counter = counter(candidates)

self.keys =

sorted

(self.counter.keys())

self.generatecombination(candidates, target,0,

)return self.res

defgeneratecombination

(self, candidates, target, start, p)

:if target ==0:

:])return

for i in

range

(start,

len(self.keys)):

key = self.keys[i]

if self.counter[key]

>

0and target >= key:

self.counter[key]-=1

self.generatecombination(candidates, target-key, i, p)

self.counter[key]+=1

p.pop(

)return

排列組合總結

在此介紹二進位制轉化法,即,將每乙個組合與乙個二進位制數相應起來,列舉二進位制的同一時候,列舉每乙個組合。如字串 abcde,則有 00000 null 00001 a 00010 b 00011 ab 00100 c 11111 abcde 給出程式例如以下所看到的 include include...

排列組合總結

在此介紹二進位制轉化法,即。將每乙個組合與乙個二進位制數相應起來,列舉二進位制的同一時候,列舉每乙個組合。如字串 abcde,則有 00000 null 00001 a 00010 b 00011 ab 00100 c 11111 abcde 給出程式例如以下所看到的 include include...

演算法 排列組合

a m,n n n m 從 n 個數中取 m 個有前後順序的數列 有 a m,n 種方式 c m,n n n m m a m,n m 從 n 個數中取 m 個無前後順序的數列 有 c m,n 種方式 性質 c m,n c n m,n c r,n 1 c r 1,n c r,n 楊輝三角性質 c 0,...