4月30天leetcode訓練 Day27

2021-10-05 13:01:28 字數 1545 閱讀 8160

given a 2d binary matrix filled with 0』s and 1』s, find the largest square containing only 1』s and return its area.

從乙個二維矩陣中找出最大的正方形面積(正方形裡面都是1才合法)。

input: 

1 0 1 0 0

1 0 1 1 1

1 1 1 1 1

1 0 0 1 0

output: 4

這道題又是難受的動態dp演算法,看了很多人的解析才算明白這道題的解法,老套路設定乙個dp陣列用來儲存這個矩陣中各個元素作為右下角能形成的正方形的邊長個數。這樣的話dp中第一行和第一列就和矩陣的第一行第一列相同,其他位置如果為0就是0(說明以這個位置為右下角不足以構成乙個正方形),而如果為1,則該位置在dp中的值為上面,左面,左上角這三個位置的最小值加1(因為當前位置為正方形的右上角,所以形成的正方形要和其他三個方向的資料有關,而最小值的原因想以下就是假如上面的dp值為0,其他位置為1,那當前位置即便為1,在這個正方形上也無法形成啊,他只能作為自己單獨的正方形,所以要考慮其他位置的最小值)。

class

solution

:def

maximalsquare

(self, matrix: list[list[

str]])

->

int:

#dp演算法

ifnot

len(matrix)

:return

0 row =

len(matrix)

# 行 col =

len(matrix[0]

)# 列

dp =[[

0for i in

range

(col)

]for i in

range

(row)

]for i in

range

(row)

: dp[i][0

]=int(matrix[i][0

])for i in

range

(col)

: dp[0]

[i]=

int(matrix[0]

[i])

for i in

range(1

,row)

:for j in

range(1

,col)

:if matrix[i]

[j]==

'1':

dp[i]

[j]=

min(dp[i-1]

[j],dp[i-1]

[j-1

],dp[i]

[j-1])

+1return

max(

map(

max,dp))**

2

這道題還有很多其他的解法,但是目前還沒看懂,以後看懂了會新增進來。

4月30天leetcode訓練 Day15

給定乙個由n個整數組成的陣列,其中n 1,則返回乙個陣列輸出,使得output i 等於除nums i 之外的所有nums元素的乘積。example input 1,2,3,4 output 24,12,8,6 不考慮時間複雜度的話,通過遞迴暴力破解,設定遞迴輔助函式,傳入陣列和開始,結束位置。開始...

4月30天leetcode訓練 Day16

給了乙個2維陣列,裡面是由1和0組成。規則是這樣的,1代表陸地,0代表海水,讓我們尋找小島,那小島肯定有乙個特點,被水隔離,連續的陸地組成一塊小島,而本題中連續的定義為上下左右相鄰 不包括對角線 基於這樣的規則讓我們找尋有幾個島。example 1 input 11110 11010 11000 0...

4月30天leetcode訓練 Day6

given an array of strings,group anagrams together.給乙個由字串構成的陣列,讓我們把裡面字串由相同的字元組合起來的字串分成一組。input eat tea tan ate nat bat output ate eat tea nat tan bat n...