Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 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 0Return 4.
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
思路:
如果当前点为成立正方形的右下角的点,则其左,左上,上的点分别都是其他正方形的右下角。这样就将化成了求子块的最优。
解决step
1.初始化一个和所给矩阵大小一致的矩阵,初始值为0
2.初始化新建矩阵的第0行和第0列,值对应为所给矩阵的值
3.右下角点记录最大位置,先将所给矩阵值赋值给右下角点,如果不为零则取他左,左上,上中最小的值,然后加1的值为当前点的值。
4.遍历记录矩阵返回最大边长
5.算出最大面积。
class Solution(object):
def maximalSquare(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
if len(matrix) is 0:
return 0
row = len(matrix)
col = len(matrix[0])
rm = [[0]*col for i in range(row)]
for i in range(col):
rm[0][i] = int(matrix[0][i])
for i in range(row):
rm[i][0] = int(matrix[i][0])
for i in range(1,row):
for j in range(1,col):
rm[i][j] = int(matrix[i][j])
if rm[i][j] is not 0:
rm[i][j] = int(min(rm[i-1][j-1],rm[i][j-1],rm[i-1][j]))+1
r = 0
for i in rm:
for j in i:
if r<j:
r = j
return r**2