leetcode筆記 第十四周 回溯演算法

2021-10-12 02:56:00 字數 2915 閱讀 8020

回溯演算法是一種純暴力搜尋演算法,可以解決組合問題、排列問題、子集問題、切割問題、棋盤問題…

class

solution

:def

readbinarywatch

(self, num:

int)

-> list[

str]

:# 暴力法:遍歷hour和minite,bin().count("1")實現統計二進位制表示中1的數量

res =

for h in

range(12

):for m in

range(60

):ifbin

(h).count(

"1")

+bin

(m).count(

"1")

==num:

"%d:%02d"

%(h,m)

)return res

class

solution

:def

subsets

(self, nums: list[

int])-

> list[list[

int]]:

# 偷看答案,就是不斷把最後乙個元素加入到res已有元素中形成tmp,再加入res中

res =[[

],]for num in nums:

res +=

[ele +

[num]

for ele in res]

return res

class

solution

:def

partition

(self, s:

str)

-> list[list[

str]]:

ifnot s:

return[[

]]iflen

(s)==1:

return

[[s]

] res =

for i in

range(1

,len

(s)+1)

:# 當分割前面是回文的時候

if s[

:i]==s[

:i][::

-1]:

# 前面回文加入到後面的所有可能結果中組成最終結果,後面部分用回溯嘛

res +=

[[s[

:i]]

+ ele for ele in self.partition(s[i:])

]return res

class

solution

:def

countarrangement

(self, n:

int)

->

int:

nums =

set(

range(1

,n+1))

used =

set(

) res =

0def

perfectlist

(num)

:nonlocal res

if num == n+1:

# 判斷回溯是否結束

res +=

1return

for ele in nums-used:

if num % ele ==

0or ele % num ==0:

used.add(ele)

perfectlist(num+1)

used.remove(ele)

# 回溯,將狀態重置到上一步,與上上行一起出現的

perfectlist(1)

return res

class

solution

:def

restoreipaddresses

(self, s:

str)

-> list[

str]

:def

backtrack

(allip, cnt, idx)

:if cnt ==

4and idx ==

len(s)

:# 回溯:判斷是否應該結束了1:

])return

if cnt >4:

# 回溯:非法狀態直接結束

return

for i in

range

(min(3

,len

(s)-idx)):

# 回溯:遍歷所有可能的情況

if s[idx]

=='0'

:# 考慮遇到0直接回溯,不在後面加數字了

backtrack(allip+

'.'+s[idx]

, cnt+

1, idx+1)

break

cur =

''for j in

range

(i+1):

cur += s[idx+j]if0

<=

int(cur)

<=

255:

backtrack(allip+

'.'+cur, cnt+

1, idx+j+1)

# 進行下一步嘗試,搜尋該子樹

iflen

(s)<4or

len(s)

>12:

# 回溯:首先判斷邊界條件

return

res =

backtrack('',

0,0)

# 回溯:根節點的輸入

return res

困難,溜了溜了

困難,打擾了

第十四周小結

這一周,我們分到了新的學習場地 609 我們組全員搬來了這裡。609在院裡被叫做 眾創空間 這裡不僅有著更好的學習條件,還存放著我們院裡的榮譽,一張一張的獎狀,還有精美的證書,讓我對信工院有了新的認識。同時,在日常生活中我也有一些自己的心得。一 執行力 結果很重要 之前 給我們在小組的所有成員開了乙...

第十四周總結

一.學習 今天很開心,因為我成功的做出了我人生的第乙個比較完整全面的頁面,雖然用的都是一些很簡單的 但那也是我花了乙個晚上做出來的,是我用這段時間所學的前端知識做出來的。雖然當時已經很晚了,但我絲毫感覺不到睡意,心中只有乙個目標,那就是今晚一定要完成它。或許對別人來說這不算什麼,但那張頁面被注入的精...

第十四周總結

又是新的一周,新的一周是新的起航,是夢的開始,每天的生活不需要過的多麼驚濤駭浪,只要我們是平平淡淡 腳踏實地 按照自己的追求走過的那就會有價值,就值得回憶。這周依舊平平淡淡,每天還是遵循自己的計畫一步步走過來的,最震撼的一件事就是我們搬到了609學習,可能是新環境的原因,這裡的學習氛圍相當好,條件也...