给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
您在真实的面试中是否遇到过这个题?Yes
样例
在矩阵:
[
[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
个岛.
class Solution {
public:
void dfs(vector<vector<bool>> &grid, int i, int j) {
if (i < 0 || i >= grid.size()) return;
if (j < 0 || j >= grid[0].size()) return;
if (grid[i][j] == 0) return;
grid[i][j] = 0;
dfs(grid, i + 1, j);
dfs(grid, i - 1, j);
dfs(grid, i, j + 1);
dfs(grid, i, j - 1);
}
int numIslands(vector<vector<bool>> &grid) {
if (grid.empty() || grid[0].empty()) return 0;
int row = grid.size(), col = grid[0].size();
int cnt = 0;
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
if (grid[i][j] == 1) {
dfs(grid, i, j);
++cnt;
}
}
}
return cnt;
}
};