继续二叉树的遍历,这次用到的是深度优先遍历dfs
func numIslands(grid [][]byte) int {
res := 0
m, n := len(grid), len(grid[0])
// 辅助数组记录是否已经访问
visited := make([][]bool,m)
for i:=0;i<m;i++{
visited[i] = make([]bool,n)
}
var dfs func(i,j int)
dfs = func(i,j int){
// 判断边界条件,'0'表示海
if i<0||j<0||i>=m||j>=n||grid[i][j]=='0'{
return
}
if visited[i][j] {
return
}
visited[i][j] = true
// 递归上下左右
dfs(i-1,j)
dfs(i+1,j)
dfs(i,j-1)
dfs(i,j+1)
}
for i:=0;i<m;i++{
for j:=0;j<n;j++{
// 元素值为'1'且未访问过,岛屿数++,继续遍历上下左右节点
if grid[i][j] =='1' &&visited[i][j] == false{
res++
dfs(i,j)
}
}
}
return res
}
|