写了个递归,过了
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int res = 0;
int m = matrix.size();
int n = matrix[0].size();
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(matrix[i][j] == '1'){
int a = findsq(matrix, i, j, 1);
res = max(res, a);
}
}
}
return res*res;
}
int findsq(vector<vector<char>>& matrix, int i, int j, int edge){
bool find = true;
for(int x = i; x < i + edge; x++){
if(matrix[x][j+edge-1] == '0')
find = false;
}
for(int y = j; y < j + edge; y++){
if(matrix[i+edge-1][y] == '0')
find = false;
}
if(find && i+edge+1 <= matrix.size() && j+edge+1 <= matrix[0].size()){
cout << 'b';
return findsq(matrix,i,j,edge+1);
}
else if(find)
return edge;
else
return edge-1;
}
};
自己写的,考虑不全面错了
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
int res = 0;
int m = matrix.size();
int n = matrix[0].size();
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(matrix[i][j] == '1' && i-1 >= 0 && j-1 >= 0 && matrix[i-1][j] != '0' && matrix[i][j-1] != '0'){
int edge = min(matrix[i-1][j],matrix[i][j-1]) - '0';
if(matrix[i-edge][j-edge] != '0'){
matrix[i][j] += edge;
}
else
matrix[i][j] += edge-1;
}
res = max(res, matrix[i][j]-'0');
}
}
return res*res;
}
int min(int a, int b){
return a < b? a : b;
}
};
答案