Daily LeetCode 221. Maximal Square
https://leetcode.com/problems/maximal-square/
Medium
问题描述
Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing only 1’s and return its area.
Example:
1 | Input: |
思路及代码:
这一题是从一个二维数组中找出由1构成的最大的正方形的面积,可以通过动态规划的方法来解决,维护一个二维数组dp,dp[i][j]
表示以当前点为右下角顶点能够构造的正方形最大边长。
dp数组的第一行和第一列与原数组相同,从第二行开始更新,在遍历过程中,首先判断matrix[i][j]
是否为0,若为零,则当前点不能作为正方形的右下顶点,dp[i][j]
设置为零;接着从dp[i][j]
左边dp[i-1][j]
、上边dp[i][j-1]
以及斜上方dp[i-1][j-1]
中选取最小值加一作为dp[i][j]
的值。
拿题中例子来说,输入
$$
1 \quad 0\quad 1 \quad 0\quad 0\
1 \quad 0\quad 1 \quad 1\quad 1\
1 \quad 1\quad 1 \quad 1\quad 1\
1 \quad 0\quad 0 \quad 1\quad 0
$$
dp数组为:
$$
1 \quad 0\quad 1 \quad 0\quad 0\
1 \quad 0\quad 1 \quad 1\quad 1\
1 \quad 1\quad 1 \quad 2\quad 2\
1 \quad 0\quad 0 \quad 1\quad 0
$$
代码如下:
1 | class Solution: |