LeetCode_DFS_中等_200.岛屿数量

£神魔★判官ぃ 2023-10-06 22:29 69阅读 0赞

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围

示例 1:

  1. 输入:grid = [
  2. ["1","1","1","1","0"],
  3. ["1","1","0","1","0"],
  4. ["1","1","0","0","0"],
  5. ["0","0","0","0","0"]
  6. ]
  7. 输出:1

示例 2:

  1. 输入:grid = [
  2. ["1","1","0","0","0"],
  3. ["1","1","0","0","0"],
  4. ["0","0","1","0","0"],
  5. ["0","0","0","1","1"]
  6. ]
  7. 输出:3

提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 300
grid[i][j] 的值为 ‘0’ 或 ‘1’

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands

2.思路

(1)DFS
思路参考一文秒杀所有岛屿题目。

相关题目:
LeetCode_DFS_中等_面试题 16.19.水域大小

3.代码实现(Java)

  1. //思路1————DFS
  2. class Solution {
  3. public int numIslands(char[][] grid) {
  4. // res 保存岛屿数量,初始值为 0
  5. int res = 0;
  6. int m = grid.length;
  7. int n = grid[0].length;
  8. //遍历 grid
  9. for (int i = 0; i < m; i++) {
  10. for (int j = 0; j < n; j++) {
  11. if (grid[i][j] == '1') {
  12. //发现一个岛屿
  13. res++;
  14. //使用 DFS 将该岛屿淹没(包括上下左右相邻的陆地)
  15. dfs(grid, i, j);
  16. }
  17. }
  18. }
  19. return res;
  20. }
  21. public void dfs(char[][] grid, int i, int j) {
  22. int m = grid.length;
  23. int n = grid[0].length;
  24. //判断边界条件
  25. if (i < 0 || j < 0 || i >= m || j >= n) {
  26. return;
  27. }
  28. if (grid[i][j] == '0') {
  29. //当前位置已经是海水,则直接返回
  30. return;
  31. }
  32. //将当前位置变成海水,相当于使用数组 visited 记录遍历过的节点
  33. grid[i][j] = '0';
  34. //同时也淹没上下左右的陆地
  35. dfs(grid, i - 1, j);
  36. dfs(grid, i + 1, j);
  37. dfs(grid, i, j - 1);
  38. dfs(grid, i, j + 1);
  39. }
  40. }

发表评论

表情:
评论列表 (有 0 条评论,69人围观)

还没有评论,来说两句吧...

相关阅读

    相关 200. 岛屿数量

    200. 岛屿数量 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上

    相关 leetcode200. 岛屿数量

    给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包

    相关 【leetcode.200岛屿数量

    一、题目描述 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地

    相关 LeetCode200. 岛屿数量

    题目难度:中等 题目描述: > 给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。 > 岛屿总是被水包围,并且每座岛屿只能由水平方

    相关 200. 岛屿数量

    > 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 > > 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接