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
思路:动态规划
如果(i,j)=1,则
dp(i,j)=Math.min(dp(i−1,j),dp(i,j−1),dp(i−1,j−1))+1\color{red}{dp(i,j)=Math.min(dp(i-1,j),dp(i,j-1),dp(i-1,j-1))+1}dp(i,j)=Math.min(dp(i−1,j),dp(i,j−1),dp(i−1,j−1))+1

public int maximalSquare(char[][] matrix) {
int M=matrix.length,N=M>0?matrix[0].length:0;
int[][] dp=new int[M+1][N+1];
int maxSquareLen=0;
for(int i=1;i<=M;i++){
for(int j=1;j<=N;j++){
if(matrix[i-1][j-1]=='1'){
dp[i][j]=Math.min(Math.min(dp[i][j-1],dp[i-1][j]),dp[i-1][j-1])+1;
maxSquareLen=Math.max(dp[i][j],maxSquareLen);
}
}
}
return maxSquareLen;
}
本文介绍了一种使用动态规划解决二维二进制矩阵中寻找只包含1的最大正方形问题的方法。通过构建dp数组,以当前位置为右下角且全部为1的正方形边长作为状态,实现了高效求解。
1万+

被折叠的 条评论
为什么被折叠?



