题目链接:https://leetcode.com/problems/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 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0Return 4.
思路:
用c[i][j]表示在长为i、宽为j的矩阵里面,包含matrix[i][j]这个点的最大正方形的长。
显然c[i][j]的大小跟c[i-1][j]、c[i][j-1]、c[i-1][j-1]有关。画图观察c[i-1][j]、c[i][j-1]、c[i-1][j-1]包围起来的面积
可知 c[i][j] = min(c[i-1][j]、c[i][j-1]、c[i-1][j-1]) +1
算法:
public int maximalSquare(char[][] matrix) { if (matrix.length == 0) return 0; int max = 0; int c[][] = new int[matrix.length][matrix[0].length]; for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[0].length; j++) { if (matrix[i][j] == '0') { continue; } if (i == 0 || j == 0) {// 在边缘时 c[i][j] = 1; } else { c[i][j] = Math.min(c[i - 1][j - 1], Math.min(c[i - 1][j], c[i][j - 1])) + 1; } max = Math.max(max, c[i][j]); } } return max * max; }