文章目录
思路:DP
dp[i][j]代表以 i,j为正方形右下角的最大边长是多少?
动态方程:
在 matrix[i][j] == “1”,情况下
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1
class Solution:
def maximalSquare(self, matrix: List[List[str]]) -> int:
if not matrix: return 0. # 特判
m, n= len(matrix), len(matrix[0]) # row, column
dp = [[0]*n for _ in range(m)]
res = 0
for i in range(m):
for j in range(n):
dp[i][j] = int(matrix[i][j])
if dp[i][j] > res:
res = 1
for i in range(1, m):
for j in range(1, n):
if dp[i][j]: # 为1
dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
res = max(res, dp[i][j])
# for one in dp:
# print(one)
return res*re