leetcode求岛屿周长
1. 题目描述
给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域
网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。
岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。
类似这种矩阵,由1连接而成的岛屿,黄色边代表整体的边长。我们需要求整体周长。
2. 分析求解
很好想到的是简单方法就是遍历二维矩阵,遇到1的区域,看看上下左右是否有0相邻。如果有,则边长加1,或者到边界了边长也加1.重要的是建立遍历顺序不重不漏遍历所有区域。并把满足条件的边加到结果集中。
3. 代码
class Solution { public: int islandPerimeter(vector<vector<int>>& grid) { int m = grid.size(),n= grid[0].size(); // 取行列 if(m==0||n==0) return 0; int dx[4] = {-1,0,1,0},dy[4] = {0,1,0,-1}; // 定义每个方向上的步长 int result = 0; for(int i=0;i < m;i++) for(int j = 0;j < n;j++){ //双重循环取二维矩阵元素 if(grid[i][j]){ // 初始值如果不为0 我们看周围 int count=0; for(int k = 0;k < 4;k++){ //遍历四个方向 int x = i + dx[k]; int y = j + dy[k]; if(x < 0||x >= m||y < 0||y >= n||!grid[x][y]){ count+=1; } } result+=count; } } return result; } };