
关键点在于岛屿的判断。一个岛屿的所有陆地(1)都是相邻的,即上下左右四个方位的任意一个陆地都属于这个岛屿。
每找到一个陆地(1),岛屿数加1,并把陆地所属岛屿的所有陆地(1)都置为0,即将其相邻的所有1置为0,以防止一个岛屿被重复判断。
如此,遍历一次数组即可找到岛屿数量。
public class Solution {
public int NumIslands(char[][] grid) {
int res = 0;
for(int i = 0; i < grid.Length; i++)
{
for(int j = 0; j < grid[i].Length; j++)
{
if(grid[i][j] == '1')
{
res++;
func(ref grid,i,j);
}
}
}
return res;
}
private void func(ref char[][] grid,int a, int b)
{
if(grid[a][b] == '0')
return;
if(grid[a][b] == '1')
{
grid[a][b] = '0';
if(a >= 1)
func(ref grid,a-1,b);
if(a < grid.Length-1)
func(ref grid,a+1,b);
if(b >= 1)
func(ref grid,a,b-1);
if(b < grid[a].Length-1)
func(ref grid,a,b+1);
}
}
}
1731

被折叠的 条评论
为什么被折叠?



