题目描述
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:
Input:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
Output: 4
思路
dp[i][j]表示以i,j位置为右下角顶点的正方形的最长的边。
代码
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if (matrix.empty()) return 0;
int n = matrix.size();
int m = matrix[0].size();
vector<vector<int> > dp(n, vector<int>(m, 0));
int max_ = 0;
for (int i=0; i<n; ++i) {
for (int j=0; j<m; ++j) {
if (matrix[i][j] == '0') continue;
if (i == 0 || j == 0) {
dp[i][j] = 1;
}else {
dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1;
}
max_ = max(max_, dp[i][j]);
}
}
return max_*max_;
}
};