题目描述:
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and return its area.
For example, given the following matrix:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
Return 4.
题目大意:
给定一个二维01矩阵,从中找出最大的全1正方形矩阵并返回其面积。
例如给定题目描述中的矩阵,返回4。
解题思路:
动态规划(Dynamic Programming)
状态转移方程:
dp[x][y] = min(dp[x - 1][y - 1], dp[x][y - 1], dp[x - 1][y]) + 1
上式中,dp[x][y]表示以坐标(x, y)为右下角元素的全1正方形矩阵的最大长度(宽度)
Python代码:
class Solution:
# @param {character[][]} matrix
# @return {integer}
def maximalSquare(self, matrix):
if matrix == []:
return 0
m, n = len(matrix), len(matrix[0])
dp = [[0] * n for x in range(m)]
ans = 0
for x in range(m):
for y in range(n):
dp[x][y] = int(matrix[x][y])
if x and y and dp[x][y]:
dp[x][y] = min(dp[x - 1][y - 1], dp[x][y - 1], dp[x - 1][y]) + 1
ans = max(ans, dp[x][y])
return ans * ans
本文链接:http://bookshadow.com/weblog/2015/06/03/leetcode-maximal-square/
请尊重作者的劳动成果,转载请注明出处!书影博客保留对文章的所有权利。