import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 最大正方形 * @param matrix char字符型二维数组 * @return int整型 [1,0,1,0,0], [1,0,1,1,1], [1,1,1,1,1], [1,0,0,1,0] */ public int solve (char[][] matrix) { if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return 0 ; //f[i][j]表示以matrix[i][j]为右下角的正方形的 边长 int[][] f = new int[matrix.length][matrix[0].length] ; int maxLen = 0 ; for(int i = 0 ; i < f.length ; i ++) { for(int j = 0 ; j < f[0].length ; j ++) { if(matrix[i][j] == '0') continue ; if(i == 0 || j == 0) { f[i][j] = 1; } else { //转移方程,从 (上,左,上左) 这三个位置转移过来 f[i][j] = Math.min(Math.min(f[i-1][j] , f[i][j - 1]) , f[i-1][j-1]) + 1 ; } if(f[i][j] > maxLen) maxLen = f[i][j] ; } } return maxLen * maxLen ; } }