题目
给定一个metrix,由 0 和 1 构成,每个岛屿由相邻的 1 构成,0 为海洋。求 metrix 当中的岛屿数量有多少。
输入:grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]
输出:1
原题链接:https://leetcode.cn/problems/number-of-islands/
思路
dfs。用一个 visited 来辅助记录是否已访问。每找到一个未访问过的1,说明到达了一个新的岛屿,进行计数+1,再dfs走完这个岛屿更新visited。
- 复杂度分析
- 时间复杂度 O(mn)。
- 空间复杂度 O(mn)。
代码
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
int count = 0;
int m = grid.size();
int n = grid[0].size();
vector<vector<bool>> visited(m, vector<bool>(n, false));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == '1' && !visited[i][j]) {
count++;
dfs(grid, visited, m, n, i, j);
}
}
}
return count;
}
void dfs(vector<vector<char>>& grid,
vector<vector<bool>>& visited,
int& m, int& n,
int i, int j) {
if (i < 0 || i >= m || j < 0 || j >= n \
|| visited[i][j] || grid[i][j] == '0') {
return;
}
visited[i][j] = true;
dfs(grid, visited, m, n, i - 1, j);
dfs(grid, visited, m, n, i + 1, j);
dfs(grid, visited, m, n, i, j - 1);
dfs(grid, visited, m, n, i, j + 1);
return;
}
};