练习动态规划的一道题,遍历法也能解决,但这种简单粗暴的方式就不展示了。
1
题目描述
0 和 1 组成一个字符型二维矩阵,在其中找到只包含 1 的最大正方形,并返回其面积。如:输入
[["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]]
返回4。
2
题解
思路:动态规划
在LeetCode刷题DAY 2:最长回文子串中我们介绍了动态规划的含义,本次不再赘述,直接进入逻辑阐述。
class Solution:
def maximalSquare(self, matrix: List[List[str]]) -> int:
if len(matrix)==0:
return 0
# len(matrix)得到的是矩阵行数
st = [[0]*len(matrix[0]) for _ in range(len(matrix))]
maxlong = []
for i in range(len(matrix)):
for j in range(len(matrix[0])):
if matrix[i][j]=='1':
if i*j==0:
st[i][j]=1
else:
st[i][j]=min(st[i-1][j],st[i-1][j-1],st[i][j-1])+1
maxlong.append(max(st[i]))
return max(maxlong)**2