题解 | 岛屿数量

岛屿数量

https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 判断岛屿数量
 * @param grid char字符型二维数组
 * @return int整型
 */
func solve(grid [][]byte) int {
	row := len(grid)
	col := len(grid[0])
	visited := make([][]bool, row)
    for i:=0;i<row;i++{
        visited[i]=make([]bool,col)
    }
	res := 0
	//广度优先遍历
	for i := 0; i < row; i++ {
		for j := 0; j < col; j++ {
			if grid[i][j] == '1' && visited[i][j] == false {
				//递归将附近的岛屿全部标记为true
                mark(grid, visited, i, j)
				//发现新大陆
				res++
			}
		}
	}
	return res

}

func mark(grid [][]byte, visited [][]bool, i, j int) {
	visited[i][j] = true
	//将四周的岛屿都标记为true
	if i +1<len(grid) && grid[i+1][j] == '1' && visited[i+1][j] == false {
		mark(grid, visited, i+1, j)
	}
    if i > 0 && grid[i-1][j] == '1' && visited[i-1][j] == false {
		mark(grid, visited, i-1, j)
	}
    if j +1< len(grid[0]) && grid[i][j+1] == '1' && visited[i][j+1] == false {
		mark(grid, visited, i, j+1)
	}
    if j != 0 && grid[i][j-1] == '1' && visited[i][j-1] == false {
		mark(grid, visited, i, j-1)
	}
}

全部评论

相关推荐

点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务