Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing all 1’s and return its area.
For example, given the following matrix:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
Return 4.
思路:
用一个矩阵存储每个位置,方块的边长
例如:
1 1
1 2
位置A[1][1]能代表的边长为2,其大小受A[i-1][j-1],A[i-1][j],A[i][j-1],matrix[i][j]共同决定。
所以只需要遍历一次二维矩阵即可。
class Solution(object):
def maximalSquare(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
n=len(matrix)
if n<1:
return 0;
m=len(matrix[0])
list1=[[0 for i in range(m)] for j in range(n)]
max=0
for i in range(n):
list1[i][0]=int(matrix[i][0])
if list1[i][0]>max:
max=list1[i][0]
for j in range(m):
list1[0][j]=int(matrix[0][j])
if list1[0][j]>max:
max=list1[0][j]
for i in range(1,n):
for j in range(1,m):
if int(matrix[i][j])==0:
continue
a=list1[i-1][j]
b=list1[i][j-1]
c=list1[i-1][j-1]
list1[i][j]=1+min(a,b,c)
if(max<list1[i][j]):
max=list1[i][j]
return max*max