221. 最大正方形

题目:

221. 最大正方形
在这里插入图片描述

题解:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码:

public class code221 {

    public static int maximalSquare(char[][] matrix) {
        // base condition
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0)
        {
            return 0;
        }
        // m 行 n 列
        int m = matrix.length;
        int n = matrix[0].length;
        int maxSide = 0;

        // dp(i, j) 是以 matrix(i - 1, j - 1) 为 右下角 的正方形的最大边长
        // dp(i + 1, j + 1) 是以 matrix(i, j) 为 右下角 的正方形的最大边长
        // dp[i + 1][j + 1] 表示 「以第 i 行、第 j 列为右下角的正方形的最大边长」
        // 相当于已经预处理新增第一行、第一列均为0
        int dp[][] = new int[m + 1][n + 1];

        for(int i = 0; i < m; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(matrix[i][j] == '1')
                {
                    dp[i + 1][j + 1] = Math.min(Math.min(dp[i + 1][j], dp[i][j + 1]),dp[i][j]) + 1;
                    maxSide = Math.max(maxSide, dp[i + 1][j + 1]);
                }
            }
        }
        return maxSide * maxSide;
    }

    public static void main(String[] args) {
        char[][] matrix = { {'1','0','1','0','0'},
                            {'1','0','1','1','1'},
                            {'1','1','1','1','1'},
                            {'1','0','0','1','0'} };
        int res = maximalSquare(matrix);
        System.out.println(res);
    }
}

参考:

  1. 理解 三者取最小+1
  2. 最大正方形
  3. 统计全为 1 的正方形子矩阵
©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页