Given a 2D binary matrix filled with 0‘s and 1‘s, find the largest square containing all 1‘s and return its area.
For example, given the following matrix:
1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0
Return 4.
Credits:
Special thanks to @Freezen for adding this problem
and creating all test cases.
实现:
int maximalSquare(vector<vector<char>>& matrix) {
int width = 0;
for (int row = 0; row < matrix.size(); row++) {
if (row + width > matrix.size()) {
break;
}
for (int col = 0; col < matrix[row].size(); col++) {
if (col + width > matrix[row].size()) {
break;
}
int w = getWidth(matrix, row, col);
if (width < w) {
width = w;
}
}
}
return width*width;
}
int getWidth(vector<vector<char>>& matrix, int row, int col) {
int wd = 0;
while (row+wd < matrix.size() && col + wd < matrix[row].size()) {
for (int r = 0; r < wd+1; r++) {
if (matrix[row+r][col+wd] == ‘0‘) return wd;
if (matrix[row+wd][col+r] == ‘0‘) return wd;
}
wd++;
}
return wd;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。