2020.10.11
原题:点击此处
题解:
1、原本使用BFS去做(超时)
2、采用DP方法。
状态转移方程
DP[i][j] = Min( dp[i-1][j],dp[i][j-1],dp[i-1][j-1] ) + 1
是个非常奇妙的方法,原理在于此图:题解图转自侵权则删除
可以尝试图通过举反例,来加深理解(证明反例不存在)
class Solution {
public int maximalSquare(char[][] matrix) {
if(matrix.length == 0){
return 0;
}
//定义dp数组
//增加多一行一列
int[][] dp = new int[matrix.length+1][matrix[0].length+1];
int max = Integer.MIN_VALUE;
for(int i = 1;i<matrix.length+1;i++){
for(int j = 1;j<matrix[0].length+1;j++){
if(matrix[i-1][j-1] == '1'){
dp[i][j] = Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]) + 1;
}
if(dp[i][j] > max){
max = dp[i][j];
}
}
}
return max*max;
}
}