在乙個由 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 當我們判斷以某個點為正方形右下角時最大的正方形時,那它的上方,左方和左上方三個點也一定是某個正方形的右下角,否則該...