新学了java二维数组的用法 int [][]array=new int[rows][];
array[i]=new int [cols];//每一行申请一列长的数据
dp更新以(i,j)为右下角顶点的最大正方形的边长,
如果matrix[i][j] =1,dp[i][j] =min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
否则dp[i][j]=0;
同时用一个状态变量保留当前最大的边长。
public class Solution {
public int maximalSquare(char[][] matrix) {if(matrix.length ==0 ) return 0;
int [][]dp = new int[matrix.length][];
for(int i=0;i<matrix.length;i++)
{
dp[i] = new int[matrix[0].length];
for(int j=0;j<matrix[0].length;j++)
{
dp[i][j] = matrix[i][j] -'0';
}
}
int tmp,ans=0;
for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix[0].length;j++)
{
if(matrix[i][j]=='1' && i>0 && j>0)
{
tmp =min(dp[i][j-1],dp[i-1][j]);
dp[i][j] = min(dp[i-1][j-1],tmp)+1;
}
ans = max(ans,dp[i][j]);
}
}
return ans*ans;
}
private int min(int a,int b)
{
if(a>=b)
return b;
return a;
}
private int max(int a,int b)
{
if(a>=b)
return a;
return b;
}