leetcode题目3
题目描述
给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量。如果不存在,则返回 0。
示例 1:
输入:grid = [[1,1,1],[1,0,1],[1,1,1]]
输出:9
示例 2:
输入:grid = [[1,1,0,0]]
输出:1
提示:
1 <= grid.length <= 100
1 <= grid[0].length <= 100
grid[i][j] 为 0 或 1
解答
class Solution {
public:
int largest1BorderedSquare(vector<vector<int>>& grid) {
int n=grid.size(),m=grid[0].size();
int lim=min(m,n);
int ans=0;/*用来记录结果*/
for(int x=0;x<n;x++){
for(int y=0;y<m;y++){
if(grid[x][y]==0) continue;/*左上边界为0,不用再继续*/
/*枚举长度*/
for(int l=0;l<lim;l++){
if(x+l>=n||y+l>=m) break;
if(grid[x+l][y]==0||grid[x][y+l]==0) break;
/*左上角的点对应的下边和横边越界,跳出*/
bool flag=true;
int px=x+l,py=y+l;
/*用于检查判断下边和右边*/
for(int c=0;c<=l&&flag;c++){
if(grid[px-c][py]==0||grid[px][py-c]==0) flag=false;
}
if(flag)ans=max(ans,(l+1)*(l+1));
}
}
}
return ans;
}
};