LeetCode 221 [Maximal Square]

原题

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

样例

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

返回 4

解题思路

  • 动态规划
  • dp[i][j]跟左上,左,上三个位置最大能延伸的正方形边长相关,如果dp[i][j]不等于0,则是三个中的最小值+1
  • 初始化第一行,第一列,然后双层for循环更新

完整代码

class Solution(object):
    def maximalSquare(self, matrix):
        """
        :type matrix: List[List[str]]
        :rtype: int
        """
        if not matrix or not matrix[0]:
            return 0
        width = len(matrix[0])
        height = len(matrix)
        dp = [[0 for i in range(width)] for j in range(height)]
        
        ans = 0
        for i in range(width):
            dp[0][i] = int(matrix[0][i])
            ans = max(ans, dp[0][i])
        for j in range(height):
            dp[j][0] = int(matrix[j][0])
            ans = max(ans, dp[j][0])
        
        for j in range(1, height):
            for i in range(1, width):
                if matrix[j][i] != "0":
                    dp[j][i] = min(dp[j-1][i-1], min(dp[j-1][i], dp[j][i-1])) + 1
                    ans = max(ans, dp[j][i])
                
        return ans * ans
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 8,653评论 0 18
  • Given a 2D binary matrix filled with 0's and 1's, find th...
    灰睛眼蓝阅读 721评论 0 0
  • 树形动态规划,顾名思义就是树+DP,先分别回顾一下基本内容吧:动态规划:问题可以分解成若干相互联系的阶段,在每一个...
    Mr_chong阅读 5,364评论 0 2
  • 分治方法 将问题划分成互不相交的子问题 递归地求解子问题 将子问题的解组合起来 动态规划(两个要素:最优子结构、子...
    superlj666阅读 3,465评论 0 0