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 1 1 1 11 0 0 1 0
Return 4.
Credits:
Special thanks to @Freezen for adding this problem and creating all test cases.
Ideas for reference: Dynamic programing. Side length f (x, y) = min (f (x-1,y), F (x,y-1), F (x-1,y-1)) + 1 with the current point (x, y) = ' 1 ' as the largest square in the lower right corner.
The code is as follows:
public class Solution {public int maximalsquare (char[][] matrix) { if (matrix==null | | matrix.length==0 | | matrix [0].length==0] return 0; int n=matrix.length; int m=matrix[0].length; int [][]d=new int[n][m]; int max=0; for (int i=0;i<n;i++) { if (matrix[i][0]== ' 1 ') { d[i][0]=1; max=1; } } for (int j=0;j<m;j++) { if (matrix[0][j]== ' 1 ') { d[0][j]=1; max=1; } } for (int i=1;i<n;i++) {for (int j=1;j<m;j++) { if (matrix[i][j]== ' 0 ') d[i][j]=0; else{ d[i][j]=math.min (Math.min (d[i-1][j],d[i][j-1]), d[i-1][j-1]) +1; Max=math.max (Max,d[i][j]); }} return Max*max;} }
Operation Result:
(Medium) Leetcode 221.Maximal Square