221. 最大正方形
题目:



题解:
java
class Solution {
public int maximalSquare(char[][] matrix) {
int n = matrix.length;
int m = matrix[0].length;
if(matrix==null||n<1||m<1) {
return 0;
}
int[][] dp = new int[n+1][m+1];
int maxSum=0;
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
if(matrix[i-1][j-1]=='1') {
//这个操作使得如果左边,上边,左上边全是1的时候,才会计入边长加一,
//否则边长依旧是最小的,这就说明该点不会参与最短边长的计算
dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]), dp[i-1][j-1])+1;
maxSum=Math.max(maxSum, dp[i][j]);
}
}
}
return maxSum*maxSum;
}
}