我们发现,岛屿的边的个数可以如下计算,如果从这一方格出发,遍历上下左右,如果周围出界了或者是水,那么这个周围就是一条边。因为题目保证了只有一个岛屿,所以可以不用DFS,直接对整个方格进行遍历就能解决。
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
int res = 0;
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[0].size();j++){
if(grid[i][j]==1){
for(int k=0;k<4;k++){
int x = i + dx[k];
int y = j + dy[k];
if(x<0||x>=grid.size()||y<0||y>=grid[0].size()||grid[x][y]==0) res++;
}
}
}
}
return res;
}
};