zoukankan      html  css  js  c++  java
  • lc 最大正方形

    链接:https://leetcode-cn.com/problems/maximal-square/

    代码:

    class Solution:
        def maximalSquare(self, matrix: List[List[str]]) -> int:
            m = len(matrix)
            if m == 0:
                return 0
            res = -1
            n = len(matrix[0])
            dp = [[0] * n for _ in range(m)]
            if n == 0:
                return 0
            for i in range(m):
                for j in range(n):
                    if matrix[i][j] == '1':
                        if i == 0 or j == 0:
                            dp[i][j] = 1
                        else:
                            dp[i][j] = min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j]) + 1
                    res = max(res, dp[i][j])
            return res*res
    View Code

    思路:dp[i,j]表示以 matrix[i,j]为右下角的最大的正方形的边长。dp[i,j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1,是由左,上,左上转移来的,一定要记住 dp 是又同等性质不同规模的子问题转移过来,通过记录子问题状态来达到节省时间的目的(不用每到一个点就重复算子问题了)

  • 相关阅读:
    discuz开发笔记
    响应式布局
    timedelta
    图片轮播
    性能
    事件捕获
    git
    css hacks
    AFNetworking 网络错误提示data转换字符串
    常见HTTP错误代码
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/12953846.html
Copyright © 2011-2022 走看看