221. Maximal Square

Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.

For example, given the following matrix:

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

Return 4.

本题一定要注意,做动态规划方法的时候,dp里面的值不能够存储面积属性,之能存储边长。因为面积属性到时候还需要开平方根。代码如下:

public class Solution {

    public int maximalSquare(char[][] matrix) {

        if(matrix==null||matrix.length==0||matrix[0].length==0) return 0;

        int m = matrix.length;

        int n = matrix[0].length;

        int max = 0;

        int[][] dp = new int[m][n];

        for(int i=0;i<m;i++){

            if(matrix[i][0]=='1') dp[i][0] = 1;

            max = Math.max(dp[i][0],max);

        }

        for(int i=0;i<n;i++){

            if(matrix[0][i]=='1') dp[0][i] = 1;

            max = Math.max(dp[0][i],max);

        }

        for(int i=1;i<m;i++){

            for(int j=1;j<n;j++){

                if(matrix[i][j]=='1'){

                    if(dp[i-1][j-1]!=0&&dp[i-1][j]!=0&&dp[i][j-1]!=0){

                        dp[i][j] = Math.min(dp[i-1][j-1],Math.min(dp[i][j-1],dp[i-1][j]))+1;

                        max = Math.max(max,dp[i][j]);

                    }else{

                        dp[i][j] = 1;

                    }

                }

            }

        }

        return max*max;

    }

}

posted @ 2017-02-03 08:37  CodesKiller  阅读(116)  评论(0编辑  收藏  举报