Given a 2d grid map of '1'
s (land) and '0'
s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
Example 1:
11110
11010
11000
00000
Answer: 1
Example 2:
11000
11000
00100
00011
Answer: 3
一个dfs,很容易超时,可能是因为我习惯的写法问题。
虽然评论区都是直接修改了grid数组,但是我个人不习惯改动原给的数组,所以我重开vis数组作为标记。时间复杂度O(n),空间复杂度O(n)
class Solution {
public:
int dir[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
int n, m;
int numIslands(vector<vector<char>>& grid) {
n = grid.size();
if (n == 0) return 0;
m = grid[0].size();
int ans = 0;
vector<vector<int> > vis(n, vector<int>(m, 0));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (grid[i][j] == '0' || vis[i][j]) continue;
dfs(vis, grid, i, j);
ans++;
}
}
return ans;
}
void dfs(vector<vector<int> >& vis, vector<vector<char>>& grid, int x, int y) {
if (x < 0 || y < 0 || x >= n || y >= m) return;
if (grid[x][y] == '0' || vis[x][y]) return;
vis[x][y] = 1;
for (int i = 0; i < 4; ++i) {
int xx = x + dir[i][0];
int yy = y + dir[i][1];
dfs(vis, grid, xx, yy);
}
return;
}
};