Example 1:
11110
11010
11000
00000
Answer: 1
Example 2:
11000
11000
00100
00011
Answer: 3
遍历字符数组,如果遇到‘1’,计数器加1,并且通过DFS从当前点开始,对和当前点连通的‘1’进行标记,然后继续搜索数组,直到结束。代码如下:
public class Solution { public int numIslands(char[][] grid) { if(grid == null || grid.length == 0) return 0; int result = 0; for(int i = 0; i < grid.length; i++) { for(int j = 0; j < grid[0].length; j++) { if(grid[i][j] != '1') continue; result ++; expandIsland(i, j, grid); } } return result; } public void expandIsland(int i, int j, char[][] grid) { if(i < 0 || j < 0 || i == grid.length || j == grid[0].length) return; if(grid[i][j] == '1') { grid[i][j] = 'X'; expandIsland(i - 1, j, grid); expandIsland(i + 1, j, grid); expandIsland(i, j + 1, grid); expandIsland(i, j - 1, grid); } } }