手撕代码:0-1矩阵的最大正方形
参考回答:
int row = matrix.length; //行大小
int line = matrix[0].length; //列大小
//一个与matrix相同大小的辅助数组
int[][] tmp = new int[row][line];
//将matrix的第一行和第一列元素直接存放到
for(int i=0;i<row;i++){ tmp[i][0] = matrix[i][0]; } for(int i=0;i<line;i++){ tmp[0][i] = matrix[0][i]; } for(int i=1;i<row;i++){ for(int j=1;j<line;j++){ if(matrix[i][j] == 1){ tmp[i][j] = Math.min(Math.min(tmp[i-1][j],tmp[i][j-1]),tmp[i-1][j-1]) + 1; } if(matrix[i][j] == 0){ tmp[i][j] = 0; } } }
int max=0; //记录tmp中最大元素的值(tmp中元素值表示正方形的边长)
for(int i=0;i<row;i++){ for(int j=0;j<line;j++){ if(tmp[i][j] > max){ max = tmp[i][j]; } } } return max*max; }