leetcode hot100岛屿数量

在这里插入图片描述
本题中要求统计岛屿数量(数字1的上下左右均为1,则是连续的1,称为一块岛屿)。那么这种类型题都是需要依靠深度优先搜索(DFS)或者广度优先搜索(BFS)来做的。这两种搜索,实际上都是利用了递归和回溯!(递归三部曲)

本题两种方法都可以,这里采用dfs,我们知道,
首先要确定递归函数的参数,这里我们需要将二维数组grid传入,然后还需要传入一个点的横坐标i以及它的纵坐标j。因为我们只能通过坐标来定位。然后确定返回值,通常返回值都是void。

然后确定终止条件,当我们的点移动到边界上的时候,就该停止了。也就是,i<0或者i>=grid.length或者j<0或者j>=grid[0].length(注意,这里i是横坐标,横坐标的最大也就是二维数组的大小。j是纵坐标,j最大应该是在一行中,也就是二维数组中的一个一维数组的长度,但是不确定当前二维数组有几个一维数组,所以选择grid[0].length)

然后确定单层递归的逻辑,上述的终止条件,一旦触发,则直接return。然后,其他情况,我们首先要把遇到的这块土地上的数据置为0(防止重复遇到)。然后,我们就可以判断这块坐标的上下左右都是不是1(即是否符合题中要求,这里就是递归!

注意:如何体现这个坐标点(i,j)的上下左右呢?
上:(i-1,j)
下:(i+1,j)
左:(i,j-1)
右:(i,j+1)

在函数中之所以用两层for循环是为了遍历二维数组,找寻数字为1的坐标!因为题中并没有给出岛屿的坐标,需要我们首先找到第一个,然后再判断这个坐标旁边的点是否符合,进而继续寻找岛屿!

public int numIslands(char[][] grid) {
    int res = 0; //记录找到的岛屿数量
    for(int i = 0;i < grid.length;i++){
        for(int j = 0;j < grid[0].length;j++){
        	//找到“1”,res加一,同时淹没这个岛
            if(grid[i][j] == '1'){
                res++;
                dfs(grid,i,j);
            }
        }
    }
    return res;
}
//使用DFS“淹没”岛屿
public void dfs(char[][] grid, int i, int j){
	//搜索边界:索引越界或遍历到了"0"
    if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == '0') return;
    //将这块土地标记为"0"
    grid[i][j] = '0';
    //根据"每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成",对上下左右的相邻顶点进行dfs
    dfs(grid,i - 1,j);
    dfs(grid,i + 1,j);
    dfs(grid,i,j + 1);
    dfs(grid,i,j - 1);
}

相关推荐

  1. LeetCodehot100

    2024-01-29 02:52:01       57 阅读
  2. 刷题Day54|99. 岛屿数量100. 岛屿的最大面积

    2024-01-29 02:52:01       28 阅读
  3. [力扣 Hot100]Day51 岛屿数量

    2024-01-29 02:52:01       40 阅读
  4. 【LeetCode热题100】【图论】岛屿数量

    2024-01-29 02:52:01       30 阅读
  5. 一个月速刷leetcodeHOT100 day02

    2024-01-29 02:52:01       37 阅读
  6. 一个月速刷leetcodeHOT100 day 01

    2024-01-29 02:52:01       94 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-29 02:52:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-29 02:52:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-29 02:52:01       82 阅读
  4. Python语言-面向对象

    2024-01-29 02:52:01       91 阅读

热门阅读

  1. 游戏中排行榜的后台实现

    2024-01-29 02:52:01       56 阅读
  2. 在CSS中如何寻找第一个元素

    2024-01-29 02:52:01       54 阅读
  3. A. Problemsolving Log

    2024-01-29 02:52:01       55 阅读
  4. 关于css 的基础试题

    2024-01-29 02:52:01       52 阅读
  5. Spring Boot更换Spring fox为Springdoc

    2024-01-29 02:52:01       48 阅读
  6. 组装无人机需要哪些工具?

    2024-01-29 02:52:01       48 阅读
  7. OkHttp的理解和使用

    2024-01-29 02:52:01       53 阅读
  8. 四、MySQL之增删改

    2024-01-29 02:52:01       46 阅读
  9. 临床医疗大数据治理框架

    2024-01-29 02:52:01       56 阅读
  10. Hive之set参数大全-17

    2024-01-29 02:52:01       42 阅读
  11. 从c到c++——6:auto

    2024-01-29 02:52:01       53 阅读
  12. Python NLP深度学习进阶:自然语言处理

    2024-01-29 02:52:01       40 阅读
  13. NET高级面试指南专题二【泛型】

    2024-01-29 02:52:01       46 阅读
  14. Flask介绍和优势

    2024-01-29 02:52:01       56 阅读