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;    
      }
    };
全部评论

相关推荐

03-13 10:35
安徽大学 Java
牛客246100688号:蚂蚁卡简历的,简历看不上眼全a了也不会有面试的。
投递蚂蚁集团等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务