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});
            }
        }
    }
}

相关推荐

  1. 200. 岛屿数量

    2023-12-07 21:36:01       33 阅读
  2. c++计算岛屿数量

    2023-12-07 21:36:01       27 阅读
  3. leetcode 200 岛屿数量

    2023-12-07 21:36:01       6 阅读
  4. 200. 岛屿数量

    2023-12-07 21:36:01       6 阅读
  5. leetcode算法题:岛屿数量

    2023-12-07 21:36:01       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-07 21:36:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-07 21:36:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-07 21:36:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-07 21:36:01       20 阅读

热门阅读

  1. KALI LINUX附录

    2023-12-07 21:36:01       28 阅读
  2. 华为eNSP AR2220路由器配置教程

    2023-12-07 21:36:01       54 阅读
  3. KALI LINUX安全审核

    2023-12-07 21:36:01       29 阅读
  4. 在Ubuntu上搭建RiscV交叉编译环境

    2023-12-07 21:36:01       240 阅读
  5. AISchedule(4):番茄钟功能

    2023-12-07 21:36:01       35 阅读
  6. .Net 字符集与编解码

    2023-12-07 21:36:01       29 阅读
  7. 聊聊springboot的logging.group

    2023-12-07 21:36:01       37 阅读