题目如下:
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.
Example:
Input: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 Output: 4
解答如下:
方法还是用动态规划。
以dp[i][j]
为右下角顶点可以拓展的正方形边长.
dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
代码:
class Solution {
public int min(int a,int b){
return a<b?a:b;
}
public int max(int a,int b){
return a>b?a:b;
}
public int maximalSquare(char[][] matrix) {
if(matrix.length == 0) return 0;
int row = matrix.length;
int col = matrix[0].length;
int[][] dp=new int[row+1][col+1];
int maxLen = 0;
for(int i =1; i<=row; i++) {
for(int j =1; j<= col; j++) {
if(matrix[i-1][j-1] == '1') {
dp[i][j] = min(min(dp[i-1][j-1], dp[i-1][j]), dp[i][j-1])+1 ;
maxLen = max(maxLen, dp[i][j]);
}
}
}
return maxLen*maxLen;
}
}