题目描述
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
思路
二维dp
- 创建一个与给定matrix等大的二维数组,用于保存以i,j为右下角的正方形边长
- 当前值为1时,才有可能组成正方形,计算边长有以下两种情况
- 如果位于第一行或者第一列,直接将当前值记为边长为1即可
- 不是上述情况,就要分别去看当前值的左边,上边,左上边,三值中的最小值+1即为当前值(因为当前的边长大小取决于这三值)
- 返回记录中最长的边长的平方即为最大正方形面积
class Solution(object):
def maximalSquare(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
if not matrix:
return 0
rows=len(matrix)
cols=len(matrix[0])
dp=[[0]*cols for i in range(rows)]
length=0
for i in range(rows):
for j in range(cols):
if matrix[i][j]=="1":
if i==0 or j==0:
dp[i][j]=1
else:
dp[i][j]=min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1])+1
length=max(length,dp[i][j])
return length*length