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:
Input: 11110 11010 11000 00000 Output: 1
Example 2:
Input: 11000 11000 00100 00011 Output: 3
二维地图上全是'1'
(土地)和'0'
(水),计算岛屿的数量。 一个岛屿被水包围,是通过水平或垂直连接相邻的陆地而形成的。 您可以假定网格的所有四个边缘都被水包围。
我这答案应该不是最简单的方法。我是直接遍历一遍所有的点,有点是'1'
(土地),那么就清空这个岛屿(全变'0'
),计数器自增。遍历到最后就是答案。
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
int number = 0;
for(int i = 0; i < grid.size(); i++){
for(int j = 0; j < grid.at(i).size(); j++){
if(grid.at(i).at(j) == '1'){
clearIsland(i, j, grid);
number++;
}
}
}
return number;
}
void clearIsland(int i, int j, vector<vector<char>>& grid){
grid.at(i).at(j) = '0';
if(j > 0 && grid.at(i).at(j-1) == '1')
clearIsland(i, j-1, grid);
if(j < grid.at(i).size()-1 && grid.at(i).at(j+1) == '1')
clearIsland(i, j+1, grid);
if(i > 0 && grid.at(i-1).at(j) == '1')
clearIsland(i-1, j, grid);
if(i < grid.size()-1 && grid.at(i+1).at(j) == '1')
clearIsland(i+1, j, grid);
}
};