当前位置: 首页 > article >正文

LeetCode Hot100 200.岛屿数量

题目

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

方法一:深度优先遍历DFS

class Solution {
    public int numIslands(char[][] grid) {
        int count = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (grid[i][j] == '1') {
                    dfs(grid, i, j);
                    count++;
                }
            }
        }
        return count;
    }

    private void dfs(char[][] grid, int i, int j) {
        if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length || grid[i][j] == '0') // 终止条件
            return;
        grid[i][j] = '0';
        dfs(grid, i + 1, j); // 下
        dfs(grid, i, j + 1); // 右
        dfs(grid, i - 1, j); // 上
        dfs(grid, i, j - 1); // 左
    }
}

方法二:广度优先遍历BFS

class Solution {
    public int numIslands(char[][] grid) {
        int count = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (grid[i][j] == '1') {
                    bfs(grid, i, j);
                    count++;
                }
            }
        }
        return count;
    }

    private void bfs(char[][] grid, int i, int j) {
        Queue<int[]> list = new LinkedList<>();
        list.add(new int[] {i, j});
        while (!list.isEmpty()) {
            int[] cur = list.remove();
            i = cur[0];
            j = cur[1];
            if (i >= 0 && i < grid.length && j >= 0 && j < grid[0].length && grid[i][j] == '1') {
                grid[i][j] = '0';
                list.add(new int[] {i - 1, j});
                list.add(new int[] {i + 1, j});
                list.add(new int[] {i, j - 1});
                list.add(new int[] {i, j + 1});
            }
        }
    }
}


http://www.kler.cn/news/159923.html

相关文章:

  • Hadoop学习笔记(HDP)-Part.03 资源规划
  • 【Pytorch使用自制数据集,Dataloader】
  • 7.上传project到服务器及拉取服务器project到本地、更新代码冲突解决
  • Leetcode每日一题学习训练——Python3版(最小化旅行的价格总和)
  • Mac-idea快捷键操作
  • Android 横竖屏切换 窗口全屏
  • C++ 构造函数与析构函数
  • Python Flask 框架开发
  • K-Radar:适用于各种天气条件的自动驾驶4D雷达物体检测
  • 图形遍历效率低?试试 R 树
  • 【华为OD题库-043】二维伞的雨滴效应-java
  • 【C++】:set和map
  • PIKA,一个神奇的AI工具
  • 《LeetCode力扣练习》代码随想录——字符串(反转字符串---Java)
  • 学生上课睡觉老师的正确做法
  • 【力扣】——可获得的最大点数(滑动窗口)
  • python炒股自动化(1),量化交易接口区别
  • 绘制折扇-第11届蓝桥杯选拔赛Python真题精选
  • SAP CA01/CA02 创建及更新工艺路线BAPI
  • 大话数据结构-查找-二叉排序树
  • Vue获取Promise then的返回值无效为空
  • 【ML】LSTM应用——预测股票(基于 tensorflow2)
  • [SQL]销售管理数据库的查询操作
  • 代码随想Day24 | 回溯法模板、77. 组合
  • 显示本周日历,左右滑动,日历翻页
  • UDP多人群聊
  • 区块链密码学:基础知识、应用与未来发展
  • c++ atmoic acquire/release
  • Python实现FA萤火虫优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战
  • Python脚本模拟真实设备刷视频播放量、浏览量