求解
1、暴力法
2、动态规划 DP
/*** 方法二:动态规划* DP*/class Solution2 {public int maximalSquare(char[][] matrix) {int rows = matrix.length, cols = rows > 0 ? matrix[0].length : 0;// 维数与原矩阵一致 dp[i][j]表示的是由当前元素作为边长时,组成的最大正方形的边长int[][] dp = new int[rows + 1][cols + 1];int maxsqlen = 0;for (int i = 1; i <= rows; i++) {for (int j = 1; j <= cols; 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;maxsqlen = Math.max(dp[i][j],maxsqlen);}}}return maxsqlen * maxsqlen;}public static void main(String[] args) {// 4System.out.println((new Solution2()).maximalSquare(new char[][]{{'1', '0', '1', '0', '0'}, {'1', '0', '1', '1', '1'}, {'1', '1', '1', '1', '1'}, {'1', '0', '0', '1', '0'}}));//9System.out.println((new Solution2()).maximalSquare(new char[][]{{'0','0','0','1'}, {'1','1','0','1'}, {'1','1','1','1'}, {'0','1','1','1'}, {'0','1','1','1'}}));}}
