力扣221最大正方形

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

  • 解法:动态规划。
  • dp[][]的含义为,以该点为右下角的最大正方形的边长。dp[i][j]的值为 左边点的dp,上边点的dp和左上点dp最小值加1.(我也确实没想到,看题解才明白。。。不过我觉得动态规划就是要多刷题才会有感觉,加油。没刷过题的话,一般人都想不到。只要想到dp的含义以及dp间转化关系,问题就解决了。)
package Leetcode;

public class maximalSquare {
    public int maximalSquare(char[][] matrix) {
        if(matrix.length==0){
            return 0;
        }
        int res=0;
        int[][] dp = new int[matrix.length+1][matrix[0].length+1];
        for (int i = 1; i <= matrix.length; i++) {
            for (int j = 1; j <= matrix[0].length; j++) {
                if(matrix[i-1][j-1]=='1'){
                    dp[i][j] = Math.min(Math.min(dp[i][j-1],dp[i-1][j]),dp[i-1][j-1])+1;
                }
                res = Math.max(res,dp[i][j]);
            }
        }
        return res*res;
    }

}

 

posted @ 2020-03-16 21:47  HEUzbc  阅读(228)  评论(0)    收藏  举报