leetcode 221.最大正方形

题目描述

在一个由 ‘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;
}

猜你喜欢

转载自blog.csdn.net/qq_45450889/article/details/131204373