221 最大正方形(動態規劃

2022-07-01 00:57:08 字數 930 閱讀 2923

在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。

上班之餘還是要保持穩定的刷題習慣。

做完本題後回憶了四道dp的題: 爬樓梯,打家劫舍,最短路徑和,最大正方形。

發現動態規劃思考量最大的還是動態轉移方程

1.本題的關鍵點就是想通,狀態轉移方程,dp[ i ][ j ] = min(dp[ i-1 ][ j-1 ] , dp[ i-1 ][ j ] , dp[ i ][ j-1 ]) + 1, 可以結合上圖想一下 邊長2推出邊長3的過程。

2.由於第一行第一列的元素是沒有三個相鄰元素來索引,所以需要構造半層padding

dp = [ [ 0 for _ in range(n+1)] for _ in range(m+1) ]

**:class solution:

def maximalsquare(self, matrix: list[list[str]]) -> int:

if not matrix: return 0 

m = len(matrix)

n = len(matrix[0])

dp = [[0 for _ in range(n+1)] for _ in range(m+1)]

for i in range(1,m+1):

for j in range(1,n+1):

if matrix[i-1][j-1] == '1':

dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1

maxlist = [max(row) for row in dp]

print(dp)

return max(maxlist)**2

221 最大正方形 動態規劃

題目描述 在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 方法1 動態規劃 主要思路 1 該方法的實現比較簡單,主要是能夠理解動態轉移公式 dp i j min ...

221 最大正方形

在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。輸入 1 0 1 0 0 1 01 11 1 11 11 1 0 0 1 0輸出 4動態規劃。1 狀態方程dp i j 表示右下角下標為 i,j 時的最大正方形邊長。當遇到0時,dp i j 0,肯定不能構成正方形 ...

221 最大正方形

在乙個由 0 和 1 組成的二維矩陣內,找到只包含 1 的最大正方形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 4 當我們判斷以某個點為正方形右下角時最大的正方形時,那它的上方,左方和左上方三個點也一定是某個正方形的右下角,否則該...