50.Maximal Square(最大正方形)

Level

  Medium

题目描述:

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

Example:

Input: 

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

Output: 4

思路分析:

  动态规划思想,要找到最大的正方形,我们以dp[ i ] [ j ]表示,以第i行第j列的1元素为正方形的右下角的正方形边长。从左上角开始,如果当前位置为1,那么到当前位置包含的最大正方形边长为左/左上/上的值中的最小值加一,因为边长是由短板控制的。注意返回的是面积,不要因为小问题而出错。

代码:

public class Solution{
    public int maximalSquare(char [][]matrix){
        if(matrix==null||matrix.length==0)
            return 0;
        int [][]dp=new int [matrix.length+1][matrix[0].length+1];  //dp[i][j]表示,以第i行第j列的1元素为正方形的右下角的正方形边长
        int result=0;
        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-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
                    result=Math.max(result,dp[i][j]);
                }
            }
        }
        return result*result;
    }
}

猜你喜欢

转载自www.cnblogs.com/yjxyy/p/11087439.html