463岛屿周长

题目

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

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

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

示例 1:

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

代码与解析

java 复制代码
class Solution {
    int n,m;
    public int islandPerimeter(int[][] grid) {
        n = grid.length;
        m = grid[0].length;
        for(int i = 0;i < n;i ++) {
            for(int j = 0;j < m;j ++) {
                if(grid[i][j] == 1) {
                    return dfs(grid, i, j);
                }
            }
        }
        return 0;
    }
    public int dfs(int[][] grid, int x,int y) {
        // 从岛屿走向边界
        if(x < 0 || y < 0 || x >= n || y >= m)  return 1;
        // 从岛屿走向水面
        if(grid[x][y] == 0) {
            return 1;
        }
        if(grid[x][y] != 1) {
            return 0;
        }
        grid[x][y] = 2;
        return dfs(grid, x + 1, y) + dfs(grid, x - 1, y) +
            dfs(grid, x, y - 1) + dfs(grid, x, y + 1);
    }
}
相关推荐
雷渊23 分钟前
深入分析Spring的事务隔离级别及实现原理
java·后端·面试
Smilejudy32 分钟前
不可或缺的相邻引用
后端
惜鸟33 分钟前
Elasticsearch 的字段类型总结
后端
rebel34 分钟前
Java获取excel附件并解析解决方案
java·后端
微客鸟窝36 分钟前
Redis常用数据类型和命令
后端
熊猫片沃子38 分钟前
centos挂载数据盘
后端·centos
微客鸟窝39 分钟前
Redis配置文件解读
后端
不靠谱程序员41 分钟前
"白描APP" OCR 软件 API 逆向抓取
后端·爬虫
小华同学ai42 分钟前
6.4K star!企业级流程引擎黑马,低代码开发竟能如此高效!
后端·github
Paladin_z1 小时前
【导入导出】功能设计方案(Java版)
后端