版权声明:转载请和我说。 https://blog.csdn.net/u010929628/article/details/89762051
题目内容
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.
Example:
Input:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
Output: 4
题目思路
这道题目可以采用动态规划的方法。对于矩阵中的某个元素来说,动态规划的结果就是以此元素为正方形右下角的正方形的最大边长。那么如果是0,则必定不是正方形;如果是1,那么就考察左侧,右侧和上侧的部分看看是否也能构成正方形。并且根据木桶效应,选择最小的数值。
程序代码
class Solution(object):
def maximalSquare(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
if len(matrix)==0:
return 0
wid,lgt=len(matrix),len(matrix[0])
res=[0]
for i in range(wid):
matrix[i][0]=int(matrix[i][0])
if matrix[i][0]==1:
res.append(1)
for j in range(lgt):
matrix[0][j]=int(matrix[0][j])
if matrix[0][j]==1:
res.append(1)
for i in range(1,wid):
for j in range(1,lgt):
matrix[i][j]=int(matrix[i][j])
if matrix[i][j]==1:
matrix[i][j]+=min(matrix[i-1][j],matrix[i][j-1],matrix[i-1][j-1])
res.append(matrix[i][j])
return max(res)**2