leetcode - 221. 最大正方形
题目

代码
#include <iostream>
#include <vector>
using namespace std;
int maximalSquare(vector<vector<char> >& matrix) {
int m = matrix.size();
int n = matrix[0].size();
if(m == 0 || n == 0){
return 0;
}
int curSide = 0, res = 0;
vector<vector<int> > dp(m, vector<int>(n));
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(matrix[i][j] == '1'){
if(i == 0 || j == 0){
dp[i][j] = 1;
}else{
dp[i][j] = min(dp[i-1][j], min(dp[i][j-1], dp[i-1][j-1])) + 1;
}
curSide = max(curSide, dp[i][j]);
}
}
}
res = curSide * curSide;
return res;
}
int maximalSquare1(vector<vector<char> >& matrix) {
int m = matrix.size();
int n = matrix[0].size();
if(m == 0 || n == 0){
return 0;
}
int res = 0;
int count = 0, curSide = 0;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(matrix[i][j] == '1'){
count = max(count, 1);
curSide = min(m - i, n -j);
for(int k = 1; k < curSide; k++){
int flag = 1;
if(matrix[i+k][j+k] == '0'){
break;
}
for(int m = 0; m < k; m++){
if(matrix[i+m][j+k] == '0' || matrix[i+k][j+m] == '0'){
flag = 0;
break;
}
}
if(flag){
count = max(count, k+1);
}else{
break;
}
}
}
}
}
res = count * count;
return res;
}
int main(){
int m, n, res;
cin>>m>>n;
vector<vector<char> > matrix(m, vector<char>(n));
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cin>>matrix[i][j];
}
}
res = maximalSquare(matrix);
cout<<res;
return 0;
}