Golang刷题日志--岛屿问题

1.给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。

示例代码:

import "fmt"

func numIsIands(grid [][]byte) int {
	//记录岛屿数量
	var count int
	for i := 0; i < len(grid); i++ {
		for j := 0; j < len(grid[0]); j++ {
			if grid[i][j] == '1' {
				DFS(grid, i, j)
				count++
			}
		}

	}
	return count
}

// 找到岛屿边界,避免重复标记
func DFS(grid [][]byte, r, c int) {
	if r < 0 || c >= len(grid[0]) || r >= len(grid) || c < 0 || grid[r][c] != '1' {
		return
	}
	grid[r][c] = '2'
	DFS(grid, r-1, c)
	DFS(grid, r+1, c)
	DFS(grid, r, c-1)
	DFS(grid, r, c+1)
}

func main() {
	var grid = [][]byte{
		{'1', '1', '0', '0', '0'},
		{'1', '1', '0', '0', '0'},
		{'0', '0', '1', '0', '0'},
		{'0', '0', '0', '1', '1'},
	}
	var grid1 = [][]byte{
		{'1', '1', '1', '1', '0'},
		{'1', '1', '0', '1', '0'},
		{'1', '1', '0', '0', '0'},
		{'0', '0', '0', '0', '0'},
	}

	fmt.Println("岛屿数量:", numIsIands(grid))
	fmt.Println("岛屿数量:", numIsIands(grid1))
}

 

posted @ 2023-05-10 22:20  99号的格调  阅读(26)  评论(0编辑  收藏  举报