0
点赞
收藏
分享

微信扫一扫

linux解决resolv.conf重启之后会自动还原的问题的几种方法

👨‍🏫 参考题解
在这里插入图片描述

class Solution {
    public int maximalSquare(char[][] matrix) {
        // base condition: 如果矩阵为空,直接返回面积为 0
        if (matrix == null || matrix.length < 1 || matrix[0].length < 1) {
            return 0;
        }

        int height = matrix.length;  // 获取矩阵的高度
        int width = matrix[0].length;  // 获取矩阵的宽度
        int maxSide = 0;  // 用于存储当前找到的最大正方形的边长

        // 创建 dp 数组,dp[i][j] 表示以 (i-1, j-1) 为右下角的正方形的最大边长
        // 这里的 dp 数组多一行和多一列,用来处理边界情况,避免复杂的 if 判断
        int[][] dp = new int[height + 1][width + 1];  

        // 遍历矩阵中的每个格子
        for (int row = 0; row < height; row++) {
            for (int col = 0; col < width; col++) {
                // 只有当前格子为 '1' 时,才能形成正方形
                if (matrix[row][col] == '1') {
                    // 核心思路:如果当前格子是 '1',且上、左、左上格子也是 '1',
                    // 那么以当前格为右下角的最大正方形边长
                    // = 上、左、左上三个方向的最小边长 + 1。
                    dp[row + 1][col + 1] = Math.min(
                        Math.min(dp[row + 1][col], dp[row][col + 1]),  // 左、上
                        dp[row][col]  // 左上
                    ) + 1;

                    // 更新 maxSide,记录最大的边长
                    maxSide = Math.max(maxSide, dp[row + 1][col + 1]);
                }
            }
        }
        // 最后返回最大正方形的面积,面积 = 边长 * 边长
        return maxSide * maxSide;
    }
}
举报

相关推荐

0 条评论