433. 岛屿的个数
给一个 01 矩阵,求不同的岛屿的个数。
0 代表海,1 代表岛,如果两个 1 相邻,那么这两个 1 属于同一个岛。我们只考虑上下左右为相邻。
样例
样例 1:
输入:
[
[1,1,0,0,0],
[0,1,0,0,1],
[0,0,0,1,1],
[0,0,0,0,0],
[0,0,0,0,1]
]
输出:
3
样例 2:
输入:
[
[1,1]
]
输出:
1
public class Solution {
/**
* @param grid: a boolean 2D matrix
* @return: an integer
*/
public int numIslands(boolean[][] grid) {
// write your code here
if (grid == null || grid.length == 0) return 0;
int ret = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j]) {
numIslands(grid, i, j);
ret++;
}
}
}
return ret;
}
private void numIslands(boolean[][] grid, int i, int j) {
if (isValid(grid, i + 1, j)) {
grid[i + 1][j] = false;
numIslands(grid, i + 1, j);
}
if (isValid(grid, i - 1, j)) {
grid[i - 1][j] = false;
numIslands(grid, i - 1, j);
}
if (isValid(grid, i, j + 1)) {
grid[i][j + 1] = false;
numIslands(grid, i, j + 1);
}
if (isValid(grid, i, j - 1)) {
grid[i][j - 1] = false;
numIslands(grid, i, j - 1);
}
}
private boolean isValid(boolean[][] grid, int i, int j) {
if (0 <= i && i < grid.length && 0 <= j && j < grid[0].length) {
return grid[i][j];
}
return false;
}
}