leetcode-463:岛屿的周长

简介: leetcode-463:岛屿的周长

题目

题目连接

给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] = 1 表示陆地, grid[i][j] = 0 表示水域。

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

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

示例 1:

输入:grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
输出:16
解释:它的周长是上面图片中的 16 个黄色的边

示例 2:

输入:grid = [[1]]
输出:4

示例 3:

输入:grid = [[1,0]]
输出:4

解题

方法一:dfs

朝4个方向遍历,如果grid[i][j]==0或者超过边界,那么周长+1

class Solution {
public:
    vector<vector<int>> dirs={{-1,0},{1,0},{0,-1},{0,1}};
    int m,n;
    int res;
    void dfs(vector<vector<int>>& grid,int x,int y){
        grid[x][y]=-1;
        for(vector<int>& dir:dirs){
            int nx=x+dir[0];
            int ny=y+dir[1];
            if(nx<0||nx>=m||ny<0||ny>=n||grid[nx][ny]==0) res++;
            if(nx>=0&&nx<m&&ny>=0&&ny<n&&grid[nx][ny]==1){
                dfs(grid,nx,ny);
            }
        }
    }
    int islandPerimeter(vector<vector<int>>& grid) {
        m=grid.size();
        n=grid[0].size();
        res=0;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j]==0||grid[i][j]==-1) continue;
                dfs(grid,i,j);
                return res;
            }
        }
        return -1;
    }
};

方法二:模拟

class Solution {
public:
    int islandPerimeter(vector<vector<int>>& grid) {
        int m=grid.size(),n=grid[0].size();
        int res=0;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(grid[i][j]==1){
                    if(i-1<0||grid[i-1][j]==0) res++;
                    if(j-1<0||grid[i][j-1]==0) res++;
                    if(i+1>=m||grid[i+1][j]==0) res++;
                    if(j+1>=n||grid[i][j+1]==0) res++;
                }
            }
        }
        return res;
    }
};
相关文章
【力扣每日一题/30】463. 岛屿的周长
【力扣每日一题/30】463. 岛屿的周长
【力扣每日一题/30】463. 岛屿的周长
【Leetcode -463.岛屿的周长 - 476.数字的补码】
【Leetcode -463.岛屿的周长 - 476.数字的补码】
44 0
|
3月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
50 6
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
|
6月前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
72 0
|
6月前
|
分布式计算 算法 vr&ar
☆打卡算法☆LeetCode 200. 岛屿数量 算法解析
☆打卡算法☆LeetCode 200. 岛屿数量 算法解析
|
6月前
leetcode-695:岛屿的最大面积
leetcode-695:岛屿的最大面积
54 0
|
6月前
|
Go
golang力扣leetcode 200.岛屿数量
golang力扣leetcode 200.岛屿数量
32 0
|
6月前
|
C++ 索引 Python
leetcode-200:岛屿数量
leetcode-200:岛屿数量
46 0
图解LeetCode——200. 岛屿数量
图解LeetCode——200. 岛屿数量
11481 1
图解LeetCode——200. 岛屿数量