题目:
给定一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入: 11110 11010 11000 00000 输出: 1
示例 2:
输入: 11000 11000 00100 00011 输出: 3
解题思路:
对地图进行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[i].length; j ++) { if (grid[i][j] == '1') { count ++; bfs(i, j, grid); } } } return count; } private void bfs(int x, int y, char[][] grid) { if (x < 0 || y < 0 || x >= grid.length || y >= grid[0].length || grid[x][y] == '0') return; grid[x][y] = '0'; bfs(x + 1, y, grid); bfs(x - 1, y, grid); bfs(x, y + 1, grid); bfs(x, y - 1, grid); } }