前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >菜鸟的每日力扣系列——1020. 飞地的数量(#Day35)

菜鸟的每日力扣系列——1020. 飞地的数量(#Day35)

作者头像
才浅Coding攻略
发布2022-12-12 17:44:08
发布2022-12-12 17:44:08
16600
代码可运行
举报
文章被收录于专栏:才浅coding攻略才浅coding攻略
运行总次数:0
代码可运行

力扣1020. 飞地的数量

本题和第29天的黄金矿工很像,可以直接套用广度优先的模版实现。对于具体实现是与黄金矿工那道题有区别的。首先进入点是从网格边界进入,即第一行,最后一行,第一列,最后一列这四条边上的网格进入,在边界搜索1,并将走过路径标记为“0”,走过的路径意味着这条路是可以离开网格的。遍历网格,其中剩余1的个数即为无法离开网格的陆地的个数。

代码语言:javascript
代码运行次数:0
复制
from typing import List


def numEnclaves(grid: List[List[int]]) -> int:
    m, n = len(grid), len(grid[0])
    res = 0

    def dfs(x: int, y: int):
        grid[x][y] = 0  # 将经过的岛屿标记为0
        for nx, ny in ((x-1, y), (x+1, y), (x, y-1), (x, y+1)):  # 上下左右四个前进方向
            if 0 <= nx < m and 0 <= ny < n and grid[nx][ny] == 1:
                dfs(nx, ny)
    # 从网格边界四条边开始
    for j in range(n):
        if grid[0][j] == 1:  # 第一行
            dfs(0, j)
        if grid[m-1][j] == 1:  # 最后一行
            dfs(m-1, j)
    for i in range(m):
        if grid[i][0] == 1:  # 第一列
            dfs(i, 0)
        if grid[i][n-1] == 1:  # 最后一列
            dfs(i, n-1)
    # 统计整个grid剩下的1的个数
    for i in range(m):
        for j in range(n):
            if grid[i][j] == 1:
                res += 1
    return res


grid = [[0, 0, 0, 0], [1, 0, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0]]
print(numEnclaves(grid))  # 3

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 才浅coding攻略 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档