Maximal Square

来源:互联网 发布:js 时间格式化 编辑:程序博客网 时间:2024/04/27 23:01

Maximal Square

 

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 01 0 1 1 11 1 1 1 11 0 0 1 0
Return 4.

Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.

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[][] matrix) {        if (matrix == null || matrix.length == 0)            return 0;        int row = matrix.length;        int col = matrix[0].length;        int[][] dp = new int[row][col];                for (int i = 0; i < row; i++) {            dp[i][0] = Character.getNumericValue(matrix[i][0]);        }                for (int i = 0; i < col; i++) {            dp[0][i] = Character.getNumericValue(matrix[0][i]);        }                for (int i = 1; i < row; i++)             for (int j = 1; j < col; j++) {                if (Character.getNumericValue(matrix[i][j]) == 1) {                    dp[i][j] = Math.min(dp[i - 1][j - 1], dp[i - 1][j]);                    dp[i][j] = Math.min(dp[i][j], dp[i][j - 1]);                    dp[i][j] += 1;                } else {                    dp[i][j] = 0;                }                                }                int max = dp[0][0];        for (int i = 0; i < row; i++)             for (int j = 0; j < col; j++) {                if (dp[i][j] > max)                    max = dp[i][j];            }                return max * max;    }}


0 0
原创粉丝点击