Middle-题目103:221. Maximal Square

原创 2016年05月31日 19:55:10

题目原文:
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.
题目大意:
给出一个0-1矩阵,求其中最大的由1组成的正方形,返回其面积。
题目分析:
还是Dp问题,设dp[i][j]为右下角为(i,j)的正方形的边长,则有如下转移方程:
dp[i][j]=min(dp[i1][j],dp[i1][j1],dp[i][j1])+1
初始化第一行(列)的dp[0][i]和dp[j][0]为矩阵的原值。
这个转移方程用文字比较难以描述,在纸上画一下三种情况就很好理解了。
源码:(language:java)

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

成绩:
14ms,beats 58.15%,众数17ms,11.81%

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

leetcode 221: Maximal Square

leetcode 221: Maximal Square c++ python java
  • xudli
  • xudli
  • 2015年06月05日 08:15
  • 10906

LeetCode(221) Maximal Square

题目:Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing all 1’s and ...
  • guanzhongshan
  • guanzhongshan
  • 2015年08月10日 21:53
  • 483

221. Maximal Square | Java最短代码实现

原题链接:221. Maximal Square 【思路】 本题考查动态规划。我们知道当 maxtrix[i][j] = '1' 时,以 matrix[i][j] 为正方形右下角的边长,最多比以 ma...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2016年03月24日 10:20
  • 566

LeetCode221:Maximal Square

Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's and ret...
  • u012501459
  • u012501459
  • 2015年06月18日 22:53
  • 1635

[leetcode] 221 Maximal Square(最大全1正方形 &动态规划)

当我们判断以某个点为正方形右下角时最大的正方形时,那它的上方,左方和左上方三个点也一定是某个正方形的右下角,否则该点为右下角的正方形最大就是它自己了。这是定性的判断,那具体的最大正方形边长呢?我们知道...
  • NK_test
  • NK_test
  • 2015年10月04日 23:04
  • 4429

221. Maximal Square -Medium

Question Given a 2D binary matrix filled with 0’s and 1’s, find the largest square containing only...
  • Euadvancer
  • Euadvancer
  • 2017年02月11日 15:38
  • 124

[leetcode]221. Maximal Square

题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1'...
  • sinat_31360161
  • sinat_31360161
  • 2016年07月21日 12:53
  • 309

Leetcode 221. Maximal Square

221. Maximal Square Total Accepted: 29932 Total Submissions: 126159 Difficulty: Medium ...
  • fantasiasango
  • fantasiasango
  • 2016年05月18日 21:55
  • 180

LeetCode *** 221. Maximal Square

题目: Given a 2D binary matrix filled with 0's and 1's, find the largest square containing all 1's an...
  • treeshy
  • treeshy
  • 2016年04月24日 18:04
  • 87

【leetcode】221. Maximal Square

leetcode, maximal square
  • zone_programming
  • zone_programming
  • 2015年11月04日 15:39
  • 249
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目103:221. Maximal Square
举报原因:
原因补充:

(最多只允许输入30个字)