链接
求解
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) {
// 4
System.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'}}));
//9
System.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'}}));
}
}