最大正方形
题目描述
给定一个由0和1组成的2维矩阵,返回该矩阵中最大的由1组成的正方形的面积。
代码
class Solution {
public:
/**
* 最大正方形
* @param matrix char字符型vector<vector<>>
* @return int整型
*/
int solve(vector<vector<char> >& matrix) {
// write code here
// 1,0,1,0,0
// 1,0,1,1,1
// 1,1,1,1,1
// 1,0,0,1,0
// 声明一个二维的数组,数组的内容存储的是三者的延伸的边长的最小者
int row = matrix.size();
int column = matrix[0].size();
vector<vector<int> > arr(row, vector<int>(column, 0));
int ans = 0;
if (matrix[0][0] == '1') {
arr[0][0] = 1;
ans = 1;
}
//第一行和第一列要特殊处理
//第一行
for (int i=1;i<column;i++) {
if (matrix[0][i]=='1') {
arr[0][i] = 1;
ans = 1;
}
}
//第一列
for (int i=1;i<row;i++) {
if (matrix[i][0]=='1') {
arr[i][0] = 1;
ans = 1;
}
}
for (int i=1;i<row;i++) {
for (int j=1;j<column;j++) {
if (matrix[i][j] == '1') {
arr[i][j] = min(min(arr[i-1][j], arr[i][j-1]), arr[i-1][j-1]) + 1;
ans = max(ans, arr[i][j]);
}
}
}
return ans * ans;
}
};