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.

一刷
题解:由于是问能框住1的最大矩形的面积,于是我们用dynamic programming
如果a[i][j]==‘1’, 那么dp[i][j] = Math.min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1

public class Solution {
    public int maximalSquare(char[][] a) {
        if(a.length == 0) return 0;
        int m = a.length, n = a[0].length, result = 0;
        int[][] b = new int[m+1][n+1];
        int max = 0;
        for(int i=1; i<=m; i++){
            for(int j=1; j<=n; j++){
                if(a[i-1][j-1] == '1'){
                    b[i][j] = Math.min(Math.min(b[i][j-1], b[i-1][j-1]), b[i-1][j])+1;
                    max = Math.max(max, b[i][j]);
                }
            }
        }
        return max*max;
    }
}

你可能感兴趣的:(221. Maximal Square)