首页 > 其他 > 详细

[leedcode 221] Maximal Square

时间:2015-08-07 21:52:23      阅读:261      评论:0      收藏:0      [点我收藏+]

Given a 2D binary matrix filled with 0‘s and 1‘s, find the largest square containing all 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.

public class Solution {
    public int maximalSquare(char[][] matrix) {
        //dp  dynamic programing.  以当前点(x,y) = ‘1‘ 为右下角的最大正方形的边长f(x,y) = min( f(x-1,y), f(x,y-1), f(x-1,y-1)) + 1.
        //之所以将dp声明为[row+1][col+1],主要防止对第一排和第一列特殊进行讨论
        if(matrix==null||matrix.length<=0||matrix[0].length<=0) return 0;
        int row=matrix.length;
        int col=matrix[0].length;
        int res=0;
        int dp[][]=new int[row+1][col+1];
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(matrix[i][j]==‘1‘){
                    dp[i+1][j+1]=Math.min(dp[i][j],Math.min(dp[i][j+1],dp[i+1][j]))+1;
                    res=Math.max(res,dp[i+1][j+1]);
                }
                
            }
        }
        return res*res;
    }
}

 

[leedcode 221] Maximal Square

原文:http://www.cnblogs.com/qiaomu/p/4711825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!