leetcode 200 岛屿数量

题目

给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

示例

输入:grid = [

"1","1","0","0","0",

"1","1","0","0","0",

"0","0","1","0","0",

"0","0","0","1","1"

]

输出:3

解析

这道题要使用dfs法来进行遍历,在矩阵遍历的过程中,遇到为1的节点,则从该位置开始进行dfs,直到遇到边界;同时在dfs的过程中,需要将遍历到的1置为0,防止下一次又遍历到。

go 复制代码
func numIslands(grid [][]byte) int {
	var dfs func(grid [][]byte, i, j int)
	dfs = func(grid [][]byte, i, j int) {
		// dfs终止条件
		if i < 0 || j < 0 || i >= len(grid) || j >= len(grid[0]) || grid[i][j] == '0' {
			return
		}
		grid[i][j] = '0'
		dfs(grid, i+1, j)
		dfs(grid, i-1, j)
		dfs(grid, i, j+1)
		dfs(grid, i, j-1)
	}
	count := 0
	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
}
相关推荐
m沐沐3 小时前
【深度学习】YOLOv2目标检测算法——改进点、网络结构与聚类先验框解析
人工智能·pytorch·深度学习·算法·yolo·目标检测·transformer
不会就选b3 小时前
算法日常・每日刷题--<链表>3
数据结构·算法·链表
geovindu4 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
Zachery Pole6 小时前
CCF-CSP备战NO.7【队列】
算法
闪电悠米6 小时前
力扣hot100-48.旋转图像-转置翻转详解
算法·leetcode·职场和发展
满天星83035777 小时前
【算法】最长递增子序列(三种解法)
算法
啦啦啦啦啦zzzz7 小时前
算法:贪心算法
c++·算法·leetcode·贪心算法
清泓y9 小时前
RAG 技术
算法·ai
阿慧今天瘦了嘛9 小时前
计算机组成原理概述:从硬件到软件的桥梁
计算机网络·算法
网站优化(SEO)专家10 小时前
SEO核心算法拆解:网站排名快速提升的武林秘籍!
算法·搜索引擎·网站排名·核心算法