给定一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入: 11110 11010 11000 00000 输出: 1
示例 2:
输入: 11000 11000 00100 00011 输出: 3
C
void DFS(char** tmp,int row,int col,int m,int n)
{
tmp[row][col]='a';
if(row-1>=0 && '1'==tmp[row-1][col])
{
DFS(tmp,row-1,col,m,n);
}
if(row+1<=m-1 && '1'==tmp[row+1][col])
{
DFS(tmp,row+1,col,m,n);
}
if(col-1>=0 && '1'==tmp[row][col-1])
{
DFS(tmp,row,col-1,m,n);
}
if(col+1<=n-1 && '1'==tmp[row][col+1])
{
DFS(tmp,row,col+1,m,n);
}
}
int numIslands(char** grid, int gridRowSize, int gridColSize)
{
int m=gridRowSize;
int n=gridColSize;
if(0==m || 0==n)
{
return 0;
}
int count=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if('1'==grid[i][j])
{
count++;
DFS(grid,i,j,m,n);
}
}
}
return count;
}
C++
class Solution {
public:
void DFS(vector<vector<char>>& tmp,int row,int col)
{
tmp[row][col]='a';
if(row-1>=0 && '1'==tmp[row-1][col])
{
DFS(tmp,row-1,col);
}
if(row+1<=tmp.size()-1 && '1'==tmp[row+1][col])
{
DFS(tmp,row+1,col);
}
if(col-1>=0 && '1'==tmp[row][col-1])
{
DFS(tmp,row,col-1);
}
if(col+1<=tmp[0].size()-1 && '1'==tmp[row][col+1])
{
DFS(tmp,row,col+1);
}
}
int numIslands(vector<vector<char>>& grid)
{
if(grid.empty() || grid[0].empty())
{
return 0;
}
int m=grid.size();
int n=grid[0].size();
int count=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if('1'==grid[i][j])
{
count++;
DFS(grid,i,j);
}
}
}
return count;
}
};
python
class Solution:
def DFS(self,tmp,row,col):
tmp[row][col]='a'
if row-1>=0 and '1'==tmp[row-1][col]:
self.DFS(tmp,row-1,col)
if row+1<=len(tmp)-1 and '1'==tmp[row+1][col]:
self.DFS(tmp,row+1,col)
if col-1>=0 and '1'==tmp[row][col-1]:
self.DFS(tmp,row,col-1)
if col+1<=len(tmp[0])-1 and '1'==tmp[row][col+1]:
self.DFS(tmp,row,col+1)
def numIslands(self, grid):
"""
:type grid: List[List[str]]
:rtype: int
"""
if []==grid or [[]]==grid:
return 0
m=len(grid)
n=len(grid[0])
count=0
for i in range(m):
for j in range(n):
if '1'==grid[i][j]:
count+=1
self.DFS(grid,i,j)
return count