在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
示例:
输入:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
输出: 4
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximal-square
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
动态规划,使用dp[i][j]表示坐标i,j位置正方形的边长,那么dp[i][j]=1+min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])
class Solution {
public int maximalSquare(char[][] matrix) {
int vLen = matrix.length;
if(vLen==0) return 0;
int hLen = matrix[0].length;
int[][] dp = new int[vLen+1][hLen+1];
int sideLen = 0;
for(int i=0;i<vLen;i++){
for(int j=0;j<hLen;j++){
if(matrix[i][j]=='1'){
dp[i+1][j+1]=1+Math.min(Math.min(dp[i][j+1],dp[i+1][j]),dp[i][j]);
sideLen=Math.max(sideLen,dp[i+1][j+1]);
}
}
}
return sideLen*sideLen;
}
}