leetcode-200. 岛屿数量

Veronica ·
更新时间:2024-11-14
· 539 次阅读

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

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

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

示例 1:

输入: 11110 11010 11000 00000 输出: 1

示例 2:

输入: 11000 11000 00100 00011 输出: 3 解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

解题思路:从起始位置 0,0 开始搜索,找到第一个 ‘1’ 时修改其位置元素值作为访问标记,然后搜索上下左右所有相邻位置的值为1的元素,如果有相邻元素为‘1’,那么就在以这个元素为中心搜索与之相邻的1,直至所有与之相邻的‘1’都被访问过为止。这样就已经将第一个岛屿的所有值均修改为2,此时在搜索下一个为‘1’的元素,它就是下一个岛屿。

class Solution { public int numIslands(char[][] grid) { if(grid.length == 0) { return 0; } int n = grid.length; int m = grid[0].length; int count = 0; for(int i = 0; i < n; i++) { for(int j = 0; j = 0 && grid[n-1][m] == '1') { this.dfs(grid, n - 1, m); } // 下 if(n + 1 = 0 && grid[n][m-1] == '1') { this.dfs(grid, n, m - 1); } // 右 if(m + 1 < grid[0].length && grid[n][m+1] == '1') { this.dfs(grid, n, m+1); } } }
作者:yongqi_wang



岛屿 leetcode

需要 登录 后方可回复, 如果你还没有账号请 注册新账号