zoukankan      html  css  js  c++  java
  • 每日一题20201117(221. 最大正方形)

    221. 最大正方形

    image-20201117110606881

    动态规划

    求的是最大面积,可以转换为求最大边长。
    
    创建一个二维数组dp
    
    dp是以i, j坐标为右下角的正方形的最大边长。
    
    状态转移方程式:
    
    matrix[i][j] == "1"的时候:
    f(i, j) = min(f(i-1, j), f(i, j-1), f(i-1, j-1)) + 1 
    
    matrix[i][j] == "0"的时候,以这个位置为边的长度肯定为0:
    
     f(i, j) = 0
    
    class Solution:
        def maximalSquare(self, matrix: List[List[str]]) -> int:
            # 判断数组是否为空
            if len(matrix) == 0 or len(matrix[0]) == 0:
                return 0
            dp = [[0 for _ in n] for n in matrix]
            # 定义最大边长
            max_len = 0
            for i in range(len(matrix)):
                for j in range(len(matrix[i])):
                    # 如果i = 0 或者 j = 0 他们是靠边的,所以最多只能以他们本身为边
                    if i == 0 or j == 0:
                        dp[i][j] = int(matrix[i][j])
                        if dp[i][j] > max_len:
                            max_len = dp[i][j]
                        continue
                    if matrix[i][j] == '0':
                        dp[i][j] = 0
                    else:
                        # 找到3个之中最小的+1,因为已经确定matrix[i][j]不为'0'
                        dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
                        if dp[i][j] > max_len:
                            max_len = dp[i][j]
            return max_len * max_len
    
    

    需要注意的是,matrix里面的元素都是字符串不是int

    image-20201117110450683

  • 相关阅读:
    每日日报1
    shazidouhui的使用体验
    水滴的使用体验
    麻雀记的使用体验
    钢镚儿的使用体验
    TD课程通的使用体验
    01 fs模块
    0 mysql 安装
    slot
    vue引入 lodash
  • 原文地址:https://www.cnblogs.com/we8fans/p/14027662.html
Copyright © 2011-2022 走看看