Leetcode——463.岛屿的周长——题解+代码实现

一、题目


给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。

网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。

岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。

示例 :

输入:
[[0,1,0,0],
 [1,1,1,0],
 [0,1,0,0],
 [1,1,0,0]]

输出: 16

解释: 它的周长是下面图片中的 16 个黄色的边:

二、题解思路


  • 题解思路:遍历行列,四周无岛屿的独立大于周长为4,只要其左或右或上或下出现岛屿,周长就减一,最后将判断完毕后此岛屿的周长剩余值 加到总的周长上。

三、代码实现


  • C++代码实现
class Solution {
public:
    int islandPerimeter(vector<vector<int>>& grid) 
    {
        int size_1 = grid.size();      //行
        int size_2 = grid[0].size();   //列
        int land_grith = 0;    //周长
        for(int i = 0;i<size_1;i++)
        {
            for(int j = 0;j<size_2;j++)
            {
               if(grid[i][j]==1)
               {
                   int counts = 4;   //针对每一个四周独立的时候周长是4
                   if(j-1 >= 0 && grid[i][j-1] == 1)         //遇到左边有岛屿
                       counts--;   //周长减一
                   if(j+1 <= size_2-1 && grid[i][j+1] == 1)  //遇到右边有岛屿
                       counts--;
                   if(i-1 >= 0 && grid[i-1][j] == 1)         // 遇到正上方有岛屿
                       counts--;
                   if(i+1 <= size_1-1 && grid[i+1][j] == 1)   //遇到正下方有岛屿
                       counts--;
                   land_grith += counts;  //叠加周长
               }
            }
        }
        return land_grith;
    }
};

四、知识点学习


  • 短路法则

        短路法则称为快速死亡法则,也就是当部分表达式的计算可以产生结果的时候就执行跳转,余下的表达式则不被计算。主要指的是逻辑与(&&)和逻辑或(||)。如果其左侧表达式求值出来之后决定了结果,则右侧表达式的求值和副作用都不会发生。

        代码中的实例:

j-1 >= 0 && grid[i][j-1] == 1
j+1 <= size_2-1 && grid[i][j+1] == 1
i-1 >= 0 && grid[i-1][j] == 1
i+1 <= size_1-1 && grid[i+1][j] == 1

猜你喜欢

转载自blog.csdn.net/gaoyu1253401563/article/details/90109596
今日推荐