200. Number of Islands (Amazon)
11110
11010
11000
0000011000
11000
00100
00011class Solution {
int m; //rows
int n; //cols
public:
int numIslands(vector<vector<char>>& grid) {
m = grid.size();
if(m == 0) return 0;
n = grid[0].size();
vector<vector<int>> visited (m, vector<int>(n, 0));
int islands = 0;
for(int i =0; i< m; i++) {
for(int j= 0; j< n; j++) {
if(grid[i][j] == '0' || visited[i][j]) continue;
merge0(grid,visited, i, j);
islands++;
}
}
return islands;
}
private:
void merge0(vector<vector<char>>& grid, vector<vector<int>>& visited, int x, int y){
if(x<0 || x>=m) return;
if(y<0 || y>=n) return;
if(grid[x][y] == '0' || visited[x][y]) return;
visited[x][y] = 1;
// DFS 四个扩展点
// using lvaue so paramter x and y cannot not have & operator
merge0(grid, visited, x + 1, y);
merge0(grid, visited, x - 1, y);
merge0(grid, visited, x , y + 1);
merge0(grid, visited, x , y - 1);
}
}Last updated
Was this helpful?