核心思路遍历每一个格子遇到陆地就把它所在的整座岛全部淹掉标记为 0岛屿数量 1通俗解释逐个格子扫一遍碰到1说明发现一座新岛count立刻用 DFS 把这座岛所有相连的 1 都改成 0相当于淹掉继续扫直到结束这样每座岛只会被计数一次完整代码实现class Solution { public int numIslands(char[][] grid) { if(grid null || grid.length 0) return 0; int count 0; int m grid.length; int n grid[0].length; for(int i 0;im;i){ for(int j 0;jn;j){ // 找到一块陆地 if(grid[i][j] 1){ count; // 把这座岛全部淹掉 dfs(grid,i,j); } } } return count; } public void dfs(char[][] grid,int i,int j){ int m grid.length; int n grid[0].length; // 越界 或者 是水直接返回 if (i 0 || i m || j 0 || j n || grid[i][j] 0) { return; } // 淹掉 grid[i][j] 0; dfs(grid,i - 1,j); dfs(grid,i 1,j); dfs(grid,i,j - 1); dfs(grid,i,j 1); } }