https://leetcode.com/problems/number-of-islands/
题意
- 1代表陆地,0代表海水,横向纵向相连的陆地认为是同一个岛,求有几个岛
解法
- 开始想的是找到第一块陆地然后遍历查找,绕了一大圈发现好像不对。
正确思路就是找到第一块陆地然后向四个方向查找,并将找到的陆地置为’.’,计数加1,继续遍历直到最后一个位置
class Solution { public int numIslands(char[][] grid) { int row = grid.length; if (row == 0) { return 0; } int column = grid[0].length; int count = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < column; j++) { if (grid[i][j] == '1') { count++; set(grid, i, j); } } } return count; } void set(char[][] grid, int i, int j) { int row = grid.length, column = grid[0].length; if (i < 0 || i >= row) { return; } if (j < 0 || j >= column) { return; } if (grid[i][j] == '1') { grid[i][j] = '.'; set(grid, i + 1, j); set(grid, i, j + 1); set(grid, i - 1, j); set(grid, i, j - 1); } } }