[LeetCode] 221. Maximal Square 最大正方形 All LeetCode Questions List
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.
For example, given the following matrix:
1 0 1 0 0 1 0 1 1 1 1 1 0 0 1 0
Return 4.
Credits:
Special thanks to@Freezenfor adding this problem and creating all test cases.
给一个2维的01矩阵,找出最大只含有1的正方形,返回它的面积。
解法1: Brute force,对于矩阵中的每一个为1的点,都把它当作正方形的左上角,然后判断不同大小的正方形内的点是不是都为1。
解法2: DP,对于第一种的解法肯定有很多的重复计算,所以可以用DP的方法,把某一点能组成的最大正方形记录下来。
Python: DP
class Solution:
# @param {character[][]} matrix
# @return {integer}
def maximalSquare(self, matrix):
if not matrix:
return 0
m, n = len(matrix), len(matrix[0])
size = [[0 for j in xrange(n)] for i in xrange(m)]
max_size = 0
for j in xrange(n):
if matrix[0][j] == '1':
size[0][j] = 1
max_size = max(max_size, size[0][j])
for i in xrange(1, m):
if matrix[i][0] == '1':
size[i][0] = 1
else:
size[i][0] = 0
for j in xrange(1, n):
if matrix[i][j] == '1':
size[i][j] = min(size[i][j - 1], \
size[i - 1][j], \
size[i - 1][j - 1]) + 1
max_size = max(max_size, size[i][j])
else:
size[i][j] = 0
return max_size * max_sizeC++:
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if (matrix.empty() || matrix[0].empty()) return 0;
int m = matrix.size(), n = matrix[0].size(), res = 0;
vector<vector<int>> dp(m, vector<int>(n, 0));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (i == 0 || j == 0) dp[i][j] = matrix[i][j] - '0';
else if (matrix[i][j] == '1') {
dp[i][j] = min(dp[i - 1][j - 1], min(dp[i][j - 1], dp[i - 1][j])) + 1;
}
res = max(res, dp[i][j]);
}
}
return res * res;
}
};C++:
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if (matrix.empty() || matrix[0].empty()) return 0;
int m = matrix.size(), n = matrix[0].size(), res = 0, pre = 0;
vector<int> dp(m + 1, 0);
for (int j = 0; j < n; ++j) {
for (int i = 1; i <= m; ++i) {
int t = dp[i];
if (matrix[i - 1][j] == '1') {
dp[i] = min(dp[i], min(dp[i - 1], pre)) + 1;
res = max(res, dp[i]);
} else {
dp[i] = 0;
}
pre = t;
}
}
return res * res;
}
};All LeetCode Questions List 题目汇总
相关推荐
88483063 2020-04-23
cxcxrs 2020-06-26
zuixin 2020-02-01
vivenwan 2020-01-31
秋风瑟瑟 2019-10-28
秋风瑟瑟 2019-10-21
辛苦的字幕君小样 2011-07-01
mbcsdn 2019-07-01
xiaozaq 2019-06-29
pythonxuexi 2019-06-28
夫子与歌 2016-08-23
zhouguizhi 2011-08-11
80357518 2018-10-24
成长之路 2018-10-18
jinzhentao 2017-04-07
84533871 2015-11-19
wgPython 2019-04-20
87407607 2013-12-23