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 1 1 1 1 0 0 1 0
Return 4.
===================================================================
题目链接:https://leetcode.com/problems/maximal-square/
题目大意:求出全部为1的最大正方形面积。
思路:动态规划。
dp[i][j] = min ( dp[i-1][j-1] , min ( dp[i-1][j] , dp[i][j-1] ) ) + 1 ;
参考代码:
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
if ( matrix.size() == 0 || matrix[0].size() == 0 )
return 0 ;
int m = matrix.size() , n = matrix[0].size() , ans = 0 ;
vector < vector <int> > dp ( m , vector <int> ( n , 0 ) ) ;
for ( int i = 0 ; i < m ; i ++ )
{
if ( matrix[i][0] == '1' )
{
dp[i][0] = 1 ;
ans = 1 ;
}
}
for ( int i = 0 ; i < n ; i ++ )
{
if ( matrix[0][i] == '1' )
{
dp[0][i] = 1 ;
ans = 1 ;
}
}
for ( int i = 1 ; i < m ; i ++ )
{
for ( int j = 1 ; j < n ; j ++ )
{
if ( matrix[i][j] == '1' )
{
dp[i][j] = min ( dp[i-1][j-1] , min ( dp[i-1][j] , dp[i][j-1] ) ) + 1 ;
ans = max ( ans , dp[i][j] ) ;
}
}
}
return ans * ans ;
}
};