题目:在一个二维01矩阵中找到全为1的最大正方形
样例:
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0
算法:以矩阵中每一个点作为正方形右下角点来处理,当该点为1时,以该点为右下角点的最大边长最多比以它的左方、上方和左上方为右下角的正方形边长多1,即如果该点左上的三个点有值为0的点,当前点所在的全为1的正方形最大边长只能为1,所以这时只能取另外三个正方形中最小的正方形边长+1。用d[i][j]表示以i,j坐标为右下角的正方形最大边。则有状态转移方程:dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1
public static int maxSquare(int[][] matrix) {
//矩阵为空则直接返回0
if (matrix.length==0||matrix[0].length==0) {
return 0;
}
int M = matrix.length, N = matrix[0].length, res = 0;
int[][] dp = new int[M][N];
//初始化dp
for (int i=0; i<M; i++) {
if (matrix[i][0] == 1) {
dp[i][0] = 1;
res = 1;
}
}
for (int j=0; j<N; j++)