题目内容
在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。
示例 1:
输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4
示例 2:
输入:matrix = [["0","1"],["1","0"]]
输出:1
示例 3:
输入:matrix = [["0"]]
输出:0
提示:
m == matrix.lengthn == matrix[i].length1 <= m, n <= 300matrix[i][j]为'0'或'1'
编码思考
首先可以想到暴力解法,以当前节点为起点来构造正方形,然后取出最大的正方形,然后转念一想呵肯定会超时的!
之后仔细审题后发现可以使用动态规划,只需要找到当前节点是否满足构造正方形即可,解释一下就是将当前节点转换为正方形最后的一个节点。
编码流程
首先我们需要将数组中的字符串转换为数字为了后续方便操作,然后判断当前点是否满足值为1并且其左,上以及左上值为1即可以判断此点可以满足正方形的条件。最后找出最大值乘方可以获得最大正方形。
代码展示
class Solution(object):
def maximalSquare(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
res = 0
for i in range(len(matrix)):
for j in range(len(matrix[0])):
matrix[i][j] = int(matrix[i][j])
if matrix[i][j] == 1:
if i - 1 < 0 or j - 1 < 0:
res = max(res, 1)
else:
matrix[i][j] = min(matrix[i - 1][j], matrix[i - 1][j - 1], matrix[i][j - 1]) + 1
res = max(res, matrix[i][j])
return res ** 2
代码解释(AI生成的修改版)
这段代码是一个解决方案类(Solution)中的一个方法(maximalSquare),用于计算一个二维矩阵(matrix)中最大的正方形的面积。
以下是对代码的详细解释:
class Solution(object):定义了一个名为Solution的类,它继承自 Python 的内置对象object。def maximalSquare(self, matrix):定义了一个名为maximalSquare的方法,它接受一个二维列表作为参数(matrix)。self是一个特殊的参数,用于引用当前的类实例。res = 0:定义了一个变量res,用于存储最大正方形的边长。for i in range(len(matrix)):遍历矩阵的行数。for j in range(len(matrix[0])):遍历矩阵的列数。matrix[i][j] = int(matrix[i][j]):将矩阵中的每个元素转换为整数。if matrix[i][j] == 1:如果当前元素为 1,则继续处理。if i - 1 < 0 or j - 1 < 0:检查左边和上边是否有边界,如果没有,则将res更新为 1,因为一个单独的 1 也是一个正方形。else:如果左边和上边有边界,则继续处理。matrix[i][j] = min(matrix[i - 1][j], matrix[i - 1][j - 1], matrix[i][j - 1]) + 1:计算当前元素左边、上边和左上边的最小值,并加 1,得到当前元素所在正方形的边长。res = max(res, matrix[i][j]):更新最大正方形的边长。return res ** 2:返回最大正方形的面积。
总结:这段代码通过遍历二维矩阵,找到最大的正方形,并返回其面积。