[LeetCode] 221. Maximal Square

版权声明:转载请和我说。 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
        

猜你喜欢

转载自blog.csdn.net/u010929628/article/details/89762051