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 0Return 4.
入手点:每个square的右下角,如果这个点是0 那么以这个点为右下角的square一定是0,如果是1 那么就要判断它左侧的一个点,左上角的一个点,上侧的一个点的大小,是否是0 比这三个点的最小值大1 画图可以理解
public class Solution {
public int maximalSquare(char[][] matrix) {
if(matrix.length==0) return 0;
int m=matrix.length;
int n=matrix[0].length;
int [][]dp=new int[m][n];
int max=0;
for(int i=0;i<m;i++){
dp[i][0]=matrix[i][0]-'0';
max=Math.max(max,dp[i][0]);
}
for(int i=0;i<n;i++){
dp[0][i]=matrix[0][i]-'0';
max=Math.max(max,dp[0][i]);
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
dp[i][j]=matrix[i][j]=='0'?0:Math.min(dp[i-1][j-1],Math.min(dp[i][j-1],dp[i-1][j]))+1;
max=Math.max(max,dp[i][j]);
}
}
return max*max;
}
}