DP-LeetCode221. 最大正方形
程序员文章站
2022-03-03 22:01:31
1、题目描述https://leetcode-cn.com/problems/maximal-square/在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。2、代码详解class Solution(object): def maximalSquare(self, matrix): if not matrix: return 0 res = 0 # 记录结果 # 定义d....
1、题目描述
https://leetcode-cn.com/problems/maximal-square/
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
2、代码详解
class Solution(object):
def maximalSquare(self, matrix):
if not matrix:
return 0
res = 0 # 记录结果
# 定义dp数组,每个元素代表当前位置可以达到的最大的正方形的边长
# 长宽都多补了一行一列是为了更方便处理边界上的点也防止越界发生
m = len(matrix)
n = len(matrix[0])
dp = [[0 for _ in range(n + 1)] for _ in range(m + 1)] # (m+1)*(n+1)
# 从 dp 的 [1,1] 位置开始遍历
for i in range(1, m + 1):
for j in range(1, n + 1):
# 下面需要将坐标映射回 matrix 中,注意 dp 数组和 matrix 元素对应关系
if matrix[i - 1][j - 1] == '1': # 只有 1 才有可能构成正方形
if dp[i - 1][j - 1] and dp[i - 1][j] and dp[i][j - 1]:
# 如果当前点的左、上、左上都为 1, 才有机会构成更大的正方形
dp[i][j] = min(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1
else:
# 否则说明当前点的左、上、左上不全为1,也就是有0
# 那么当前节点构成的最大正方形就是自身构成的边长为 1 的正方形
dp[i][j] = 1
res = max(res, dp[i][j])
return pow(res, 2)
matrix = [["1", "0", "1", "0", "0"],
["1", "0", "1", "1", "1"],
["1", "1", "1", "1", "1"],
["1", "0", "0", "1", "0"]]
s = Solution()
print(s.maximalSquare(matrix)) # 4
本文地址:https://blog.csdn.net/IOT_victor/article/details/107677496
上一篇: flutter蓝牙插件
推荐阅读
-
max()-问一个sql问题,hour()获取日期的小时,然后给他赋值最大值,但是为什么出错了
-
ios开发之UITextField、UITextView限制最大输入数
-
如何加大MYSQL中的最大连接数?_MySQL
-
Vue实现前端页面缓存、分页记忆、性能最大化之终结篇!
-
验证DG最大性能模式下使用ARCH/LGWR及STANDBYLOG的不同情况
-
SQL设置SQLServer最大连接数查询语句
-
如何解决动态查询语句太长,大于数据库字符的最大长度
-
linux当前用户最大进程数上限 导致java堆溢出
-
python中文分词教程之前向最大正向匹配算法详解
-
验证DG最大性能模式下使用ARCH/LGWR及STANDBY LOG的不同情况