问题描述:在一个由'0'和'1'组成的二维矩阵内,找到只包含'1'的最大正方形,并返回其面积;
动态规划求解思路:定义dp[i][j]表示以i,j为右下角的正方形边长,如果[i,j]为1,则dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;表示以[i,j]为右底的正方形需要满足左边,上边,中间的最小值。
public int getMaxSquare(int [][]matrix)
{
int [][]dp=new int[matrix.length][matrix[0].length];
if(matrix[0][0]==1)
{
dp[0][0]=1;
}else
{
dp[0][0]=0;
}
for(int i=1;i<matrix.length;i++)
{
if(matrix[i][0]==1)
{
dp[i][0]=1;
}else
{
dp[i][0]=1;
}
}
for(int i=1;i<matrix[0].length;i++)
{
if(matrix[0][i]==1)
{
dp[0][i]=1;
}else
{
dp[0][j]=0;
}
}
int max=Interger.MIN_VALUE;
for(int i=1;i<matrix.length;i++)
{
for(int j=1;j<matrix[i].length;j++)
{
if(matrix[i][j]==1)
{
dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
max=Math.max(dp[i][j],max);
}else
{
dp[i][j]=0;
}
}
}
return max;
}