每日一题20201117(221. 最大正方形)

简介: 最大正方形方法

221. 最大正方形


22.jpg

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

23.jpg

image-20201117110450683




相关文章
|
2月前
|
数据可视化 图形学 Python
在圆的外面画一个正方形:Python实现与技术解析
本文介绍了如何使用Python的`matplotlib`库绘制一个圆,并在其外部绘制一个正方形。通过计算正方形的边长和顶点坐标,实现了圆和正方形的精确对齐。代码示例详细展示了绘制过程,适合初学者学习和实践。
53 9
|
7月前
|
存储 Python 容器
每日一题 2013. 检测正方形
每日一题 2013. 检测正方形
|
8月前
|
移动开发
acwing 1843 圆形牛棚
acwing 1843 圆形牛棚
|
8月前
|
JavaScript
【leetcode】221. 最大正方形 动态规划法
【leetcode】221. 最大正方形 动态规划法
30 0
【LeetCode-每日一题】-120. 三角形最小路径和
【LeetCode-每日一题】-120. 三角形最小路径和
|
测试技术
每日一题——旋转函数
每日一题——旋转函数
118 0
每日一题——旋转函数
|
算法 测试技术
LeetCode每日一题(7)——旋转函数
旋转函数 1.题目 2.示例 3.思路 4.代码 5.复杂度分析
142 0
LeetCode每日一题(7)——旋转函数
【寒假每日一题】AcWing 4652. 纸张尺寸
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
91 0

热门文章

最新文章

相关实验场景

更多