数据结构与算法之LeetCode-463-求解岛屿的周长 深度遍历(DFS)

欢迎查看和关注一个开源的个人学习计算机科学知识成长记录(前后端,数据结构与算法)

463 岛屿的周长

解题思路:

使用深度遍历 DFS ,出现两种情况:
遍历到的节点是网格边界节点,海洋的边界节点
- 海洋的边界节点 grid[r][c]===0
- 网格的边界节点 r<0||r>=grid.length||c<0||c>=grid[0].length

将遍历过的陆地节点标记为2 grid[r][c]===2,防止重复计算

var islandPerimeter = function(grid){
    const n = grid.length;
    const m = grid[0].length;

    const dfs = (r,c)=>{
        // 遇到海洋或者网格边界
        if(r<0||r>=n||c<0||c>=m||grid[r][c]===0){
            return 1;
        }

        if(grid[r][c]==2){
            return 0;
        }

        grid[r][c] = 2;

        return dfs(r-1,c)
            +dfs(r+1,c)
            +dfs(r,c-1)
            +dfs(r,c+1);
    }

    let ans = 0;
    for(let i=0;i<n;++i){
        for(let j=0;j<m;++j){
            if(grid[i][j]===1){
                ans+=dfs(i,j);
            }
        }
    }
    return ans;
}

执行结果: 通过
执行用时: 160 ms , 在所有 JavaScript 提交中击败了 66.20% 的用户
内存消耗: 47 MB , 在所有 JavaScript 提交中击败了 32.40% 的用户
通过测试用例: 5833 / 5833

参考

leetcode - 岛屿的周长

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值