221. 最大正方形
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
解题思路: 容易想到的是brute force 解法,当然这题用bf解法OJ也通过了。基本的思路是确定一个正方形的左上角点,然后确定一个长度,然后判断这个正方形内是否只包含1.此解法的时间复杂度是
O
(
N
5
)
O(N^5)
O(N5),理应是炸了的,不属于好的算法。
- 解法一
class Solution {
public:
bool helper(vector<vector<char>>& matrix, int r, int c, int len) {
for (int i = r; i < r + len; ++i) {
for (int j = c; j < c + len; ++j) {
if (matrix[i][j] == '0') return false;
}
}
return true;
}
int maximalSquare(vector<vector<char>>& matrix) {
if (matrix.empty() || matrix[0].empty()) return 0;
int rows = matrix.size(), cols = matrix[0].size();
int res = 0;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
int maxLen = min(rows - i, cols - j);
for (int k = maxLen; k >= res; --k) {
if (helper(matrix, i, j, k)) {
res = max(res, k);
break;
}
}
}
}
return res * res;
}
};