其他分享
首页 > 其他分享> > [LeetCode]221. Maximal Square 动态规划解法转移方程

[LeetCode]221. Maximal Square 动态规划解法转移方程

作者:互联网

题目描述

LeetCode原题链接:221. Maximal Square

Given an m x n binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.

 

Example 1:

Input: matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
Output: 4

Example 2:

Input: matrix = [["0","1"],["1","0"]]
Output: 1

Example 3:

Input: matrix = [["0"]]
Output: 0

Constraints:

思路分析

这道题的Related Topic里有Dynamic Programming的标签,那我们就来看看动态规划思路的解法。

1)dp数组构造

我们遍历二维数组一般是按照从上到下、从左到右的顺序进行for循环。当到达一个新的位置(i,j)的时候,数组前 i 行和第 i+1 行前 j 列的位置都是已经遍历过了的。动态规划的核心就是用已知量去推导出未知量,所以(i,j)位置右面和下面的值是怎样无需关心,我们只要去关注上面和左面就可以了。那么,我们可以将当前访问的坐标当作某个可能存在的正方形的右下角,然后来看以该点为右下角的正方形可能的边长。由于只有1才可能组成正方形,当我们遇到0的时候,直接跳过就可以了。dp[m][n]表示一个与matrix矩阵相同大小的动态规划矩阵,dp[i][j]表示以(i,j)为正方形右下角时,存在的合法正方形中面积最大的那个正方形的边长。

当matrix[i][j]=0时,我们直接令dp[i][j]=0(以该位置为右下角的正方形不存在),当matrix[i][j]=1时,我们再进行后续计算。

2)寻找合法正方形

根据正方形的特性可知,可能存在的最大正方形的边长应该是 L = min(i, j)+1 ,我们可以把 L * L 区域当作一个搜寻范围。举个

标签:Maximal,Square,matrix,位置,合法,正方形,边长,LeetCode,dp
来源: https://www.cnblogs.com/barryyeee/p/15161551.html