问题:
给一个 01 矩阵,求不同的岛屿的个数。
0 代表海,1 代表岛,如果两个 1 相邻,那么这两个 1 属于同一个岛。我们只考虑上下左右为相邻。
样例:
Example 1:
Input: [ [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] ] Output: 3
Example 2:
Input: [ [1,1] ] Output: 1
python:
class Solution:
"""
@param grid: a boolean 2D matrix
@return: an integer
"""
def changeToFalse(self, temp, m, n):
if m < 0 or m >= len(temp) or n < 0 or n >= len(temp[0]):
return
if temp[m][n]:
temp[m][n] = False
self.changeToFalse(temp, m-1, n)
self.changeToFalse(temp, m+1, n)
self.changeToFalse(temp, m, n-1)
self.changeToFalse(temp, m, n+1)
def numIslands(self, grid):
# write your code here
if len(grid) == 0 or len(grid[0]) == 0:
return 0
result = 0
for i in range(len(grid)):
for j in range(len(grid[i])):
if grid[i][j]:
result += 1
self.changeToFalse(grid, i, j)
return result
C++:
class Solution {
public:
/**
* @param grid: a boolean 2D matrix
* @return: an integer
*/
void changeToFalse(vector<vector<bool>> &grid, int m, int n)
{
if(m < 0 || m >= grid.size() || n < 0 || n >= grid[0].size())
{
return;
}
if(grid[m][n])
{
grid[m][n] = false;
changeToFalse(grid, m-1, n);
changeToFalse(grid, m+1, n);
changeToFalse(grid, m, n-1);
changeToFalse(grid, m, n+1);
}
}
int numIslands(vector<vector<bool>> &grid) {
// write your code here
if(grid.size() == 0 || grid[0].size() == 0)
{
return 0;
}
int result = 0;
for(int i = 0; i < grid.size(); i++)
{
for(int j = 0; j < grid[i].size(); j++)
{
if(grid[i][j])
{
result++;
changeToFalse(grid, i, j);
}
}
}
return result;
}
};