题目描述
题目链接221. 最大正方形
题解
动态规划:
- dp数组的含义:以当前节点为右下角的正方形的 边长
- 递推公式:dp[i][j] = min(左边、上边、左上方)+ 1
dp[i][j] = Math.min(dp[i - 1][j], Math.min(dp[i][j - 1], dp[i - 1][j - 1])) + 1;
完整代码:
class Solution {
public int maximalSquare(char[][] matrix) {
int[][] dp = new int[matrix.length][matrix[0].length];
for (int i = 0; i < matrix.length; i++){
for (int j = 0; j < matrix[0].length; j++){
dp[i][j] = matrix[i][j] - '0';
}
}
int res = 0;
for (int i = 0; i < dp.length; i++){
for (int j = 0; j < dp[0].length; j++){
if (i >= 1 && j >= 1 && dp[i][j] == 1){
dp[i][j] = Math.min(dp[i - 1][j], Math.min(dp[i][j - 1], dp[i - 1][j - 1])) + 1;
}
res = Math.max(res, dp[i][j]);
}
}
return res * res;
}
}