题目描述
在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximal-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题
动态规划:声明二维数组dp用来记录当前位置的最大边长
class Solution {
public int maximalSquare(char[][] matrix) {
int m = matrix.length, n = matrix[0].length;
int maxHeight = 0;
int[][] dp = new int[m+1][n+1];
for(int i = 1; i < m+1; i++){
for(int j = 1; j < n+1; j++){
if(matrix[i-1][j-1] == '1'){
dp[i][j] = Math.min(dp[i-1][j-1], Math.min(dp[i-1][j], dp[i][j-1])) + 1;
}
maxHeight = Math.max(maxHeight, dp[i][j]);
}
}
return maxHeight*maxHeight;
}
}
注意:题目中标注了m == matrix.length;n == matrix[i].length;1 <= m, n <= 300
所以不用单独判断 数组为空 或者 只有一列(组不成正方形)的情况,如没有标注,应加上如下判断
if(m == 0 || matrix == null || n == 0){
return 0;
}