leetcode221
int maximalSquare(vector<vector<char>>& matrix) {
int height=matrix.size();
if(height==0)
return 0;
int width=matrix[0].size();
vector<vector<int>> vec(height,vector<int>(width,0));
int result=0;
for(int i=0;i<height;i++)
{
for(int j=0;j<width;j++)
{
if(matrix[i][j]=='1')
{
vec[i][j]=1;
if(i>0&&j>0)
vec[i][j]+=min(min(vec[i-1][j],vec[i][j-1]),vec[i-1][j-1]);
}
result=max(result,vec[i][j]);
}
}
return result*result;
}
本题是动态规划的题目,vec[i,j]记录的是以matrix[i,j]为右下角的所能构成的正方形区域的边长最大值。
递推公式,vec[i][j]+=min(min(vec[i-1][j],vec[i][j-1]),vec[i-1][j-1]),计算的是当前单元格的“左”、“上”、“左上”三个单元格的最小值,再+1。
转载于//www.cnblogs.com/asenyang/p/9787674.html
还没有评论,来说两句吧...