463. 岛屿的周长

463. 岛屿的周长

  • 题号:力扣463
  • 知识点:矩阵 dfs
  • 目标完成度:31/150
  • 总结
    题干:
    在这里插入图片描述
    在这里插入图片描述

思路:

  • 1.刚开始想着使用类似200题:岛屿数量DFS的方法做,结果无法通过全部测试
  • 2.首先还是使用两层循环遍历每一个元素,当遍历到的元素为1时,使用check函数检查该元素上下左右是否为0,如果上下左右为0,则将计数器edge += 1
  • 3.然后处理边界,当为1的元素在矩阵的最上下两行或者最左最右两列时,也存在一个边界算作周长,依次检查各个边界,并加到edge[0]
class Solution:
    def check(self, grid, r, c, edge):
        nr = len(grid)
        nc = len(grid[0])

        if r-1>=0 and grid[r-1][c]==0:
            edge[0] += 1
        if r+1<nr and grid[r+1][c]==0:
            edge[0] += 1
        if c-1>=0 and grid[r][c-1]==0:
            edge[0] += 1
        if c+1<nc and grid[r][c+1]==0:
            edge[0] += 1

    def islandPerimeter(self, grid: List[List[int]]) -> int:
        num = str(grid).count('1')
        if num == 0:
            return 0
        edge = [0]
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j]:
                    self.check(grid, i, j, edge)
                    if i==0:
                        edge[0] += 1
                    if i==len(grid)-1:
                        edge[0] += 1
                    if j==0:
                        edge[0] += 1
                    if j==len(grid[0])-1:
                        edge[0] += 1
        return edge[0]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值