lintcode练习 - 436. 最大正方形

436. 最大正方形

在一个二维01矩阵中找到全为1的最大正方形

样例

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

返回 4

解题思路:

 

class Solution:
    """
    @param matrix: a matrix of 0 and 1
    @return: an integer
    """
    def maxSquare(self, matrix):
        # write your code here
        #尝试卷积核
        if not matrix or not matrix[0]:
            return 0
        
        n, m = len(matrix), len(matrix[0])
        dp = [[0] * m for _ in range(n)]
        
        #第一行只有一个1*1矩阵
        for i in range(m):
            dp[0][i] = matrix[0][i]
        
        edge = max(matrix[0])
        for i in range(1, n):
            #对每一行第一个值进行赋值
            dp[i][0] = matrix[i][0]
            for j in range(1, m):
                #如果为1
                if matrix[i][j]:
                    dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + 1
                else:
                    dp[i][j] = 0
            #记录最大矩阵的边,
            edge = max(edge, max(dp[i]))
        
        return edge * edge
                    
        

 

点赞