温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

LeetCode如何实现最大正方形

发布时间:2021-12-15 10:54:14 来源:亿速云 阅读:163 作者:小新 栏目:大数据

这篇文章将为大家详细讲解有关LeetCode如何实现最大正方形,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1

 题目描述

0 和 1 组成一个字符型二维矩阵,在其中找到只包含 1 的最大正方形,并返回其面积。如:输入

[["1","0","1","0","0"],

["1","0","1","1","1"],

["1","1","1","1","1"],

["1","0","0","1","0"]]

返回4。

2

 题解

思路:动态规划
在LeetCode刷题DAY 2:最长回文子串中我们介绍了动态规划的含义,本次不再赘述,直接进入逻辑阐述。
  • 第一步,找到中间状态:此处中间状态st[i][j]表示以矩阵中(i,j)元素作为正方形右下角顶点,可以得到最大正方形边长。

  • 第二步,确定状态转移:如果(i,j)为0,则当前位置状态值为0,否则状态值取决于其上面、左面和左上角状态值,转移关系为st[i][j]=min(st[ist[i][j]=min(st[i-1][j],st[i-1][j-1],st[i][j-1])+1,即周围最小状态值+1。不理解的可以找个案例手动算一下。且要注意的是,如果该元素在整个矩阵的最外边,则状态值仅根据该元素取值判断即可。

class Solution:    def maximalSquare(self, matrix: List[List[str]]) -> int:        if len(matrix)==0:            return 0        # len(matrix)得到的是矩阵行数        st = [[0]*len(matrix[0]) for _ in range(len(matrix))]        maxlong = []        for i in range(len(matrix)):            for j in range(len(matrix[0])):                if matrix[i][j]=='1':                    if i*j==0:                        st[i][j]=1                    else:                        st[i][j]=min(st[i-1][j],st[i-1][j-1],st[i][j-1])+1            maxlong.append(max(st[i]))        return max(maxlong)**2

关于“LeetCode如何实现最大正方形”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI