【LeetCode-221】最大正方形
问题
在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。
解答
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int res = 0;
int m = matrix.size(), n = matrix[0].size();
vector<vector<int>> dp(m + 1, vector<int>(n + 1));
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (matrix[i - 1][j - 1] != '1') continue;
dp[i][j] = min(dp[i - 1][j], min(dp[i][j - 1], dp[i - 1][j - 1])) + 1;
res = max(res, dp[i][j]);
}
}
return res * res;
}
};
重点思路
dp递推公式的意义是,以当前位置为右下角的最大正方形,值为左、上、左上位置值的最小值加一。这里需要证明充分必要条件。
- 充分条件:假设左、上、左上的dp值都为3,添加上当前位置后,画图能看出,能构成一个边长为4的正方形;
- 必要条件:当前位置能构成一个边长为4的正方形时,易得左、上、左上的dp值都为3。

浙公网安备 33010602011771号