news 2026/6/24 1:02:32

hot100-47岛屿数量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
hot100-47岛屿数量

一、题目

由 1 和 0组成的二维网格,计算网格中岛屿的数量。

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

二、思路

1、深度优先搜索DFS:遍历网格,如果当前格子是'1',说明找到了一个新的岛屿。计数+1,并调用 dfs递归把上下左右淹没整个岛屿(把相连的 '1' 改为 '0')

2、广度优先遍历BFS:定义一个二维布尔数组 visited 和队列queue。遇到未访问的 '1' 启动搜索,一层层向外扩展,将整个岛屿的所有格子标记为已访问。(在BFS中处理队列中的坐标的四周坐标,标记已访问)

三、代码

1)深度优先搜索 DFS

class Solution { public int numIslands(char[][] grid) { int count = 0; int m = grid.length, n = grid[0].length; for(int i = 0;i<m;i++){ for(int j = 0; j<n;j++){ if(grid[i][j] == '1'){ count++; dfs(grid,i,j); } } } return count; } public void dfs(char[][] grid,int i,int j){ int m = grid.length, n=grid[0].length; if(i <0 || i>=m || j<0 || j>=n || 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); } }

2)广度优先搜索 BFS

class Solution { int res = 0; int[][] dir = {{0,1},{0,-1},{1,0},{-1,0}}; boolean[][] visited; public int numIslands(char[][] grid) { int m = grid.length,n = grid[0].length; visited = new boolean[m][n]; for(int i = 0;i<m;i++){ for(int j = 0;j<n;j++){ if(grid[i][j] == '1' && !visited[i][j]){ bfs(grid,i,j); res++; } } } return res; } LinkedList<int[]> queue = new LinkedList<>(); public void bfs(char[][] grid,int i,int j){ int m = grid.length, n = grid[0].length; queue.offer(new int[] {i,j}); while(!queue.isEmpty()){ int size = queue.size(); for(int num = 0; num < size; num++){ int[] node = queue.poll(); for(int d = 0;d<4;d++){ int nodeX = node[0]+dir[d][0]; int nodeY = node[1]+dir[d][1]; if(nodeX<0 || nodeX>=m || nodeY<0 || nodeY>=n) continue; if(grid[nodeX][nodeY] == '1' && !visited[nodeX][nodeY]){ queue.offer(new int[] {nodeX,nodeY}); visited[nodeX][nodeY] = true; } } } } } }

四、总结

都在主函数中遍历网格,每遇到一个未处理的陆地('1')就计数加一,并通过搜索(DFS 或 BFS)将该陆地所属的整个岛屿全部标记为“已处理”,避免重复计数。差异在于:DFS 直接将原数组中的 '1' 改为 '0' 来标记访问,不使用额外空间;而 BFS 保留原数组不变,借助一个visited数组来记录是否访问过,仅对未访问的 '1' 进行处理。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 1:01:44

前端构建工具详解:Vite 与 Webpack 深度对比与实战指南

在现代前端工程化体系中&#xff0c;构建工具是连接开发体验与生产性能的核心枢纽。当前&#xff0c;Webpack 作为“行业标准”已统治多年&#xff0c;而 Vite 作为新一代构建工具正迅速崛起。本文将深入剖析两者的设计理念、核心机制、适用场景&#xff0c;并提供选型建议与迁…

作者头像 李华
网站建设 2026/6/22 13:17:44

智能文本 AI 客服:藏在对话框里的技术魔法

打开 APP 咨询问题&#xff0c;弹出的不再是 “人工客服繁忙” 的提示&#xff0c;而是秒回的文本对话&#xff1b;深夜想了解订单状态&#xff0c;无需等待上班时间&#xff0c;打字提问就能得到精准答案 —— 这就是智能文本 AI 客服的日常&#xff0c;它像一位不知疲倦的 “…

作者头像 李华
网站建设 2026/6/22 19:28:28

SPEC 为什么会失败?

&#x1f449;目录1 失败点 1&#xff1a;背景缺失——缺少项目级指导原则的 SPEC2 失败点 2&#xff1a;评审缺位——对 AI 生成的 SPEC 缺乏严格审查3 查失败点 3: 过度设计——在 SPEC 阶段陷入“分析瘫痪”4 失败点 4&#xff1a;规约与实现解耦——在“意外”产生时绕过 S…

作者头像 李华
网站建设 2026/6/18 5:54:05

土木堡之变的血色警示:别让“亲信滤镜“毁掉你的人生决策

打开《大明风华》中土木堡之变的剧情&#xff0c;漫天黄沙里&#xff0c;明朝五十万精锐如同决堤的洪水般溃散&#xff0c;盔甲与兵刃在乱战中碎裂的声响&#xff0c;穿越六百年时光依旧振聋发聩。这场足以改写明朝国运的惨败&#xff0c;根源并非敌军强悍&#xff0c;而是年轻…

作者头像 李华
网站建设 2026/6/24 0:21:04

IAR云就绪平台实现对瑞萨RH850/U2x的全系列支持,赋能新一代汽车电子开发

全球领先的嵌入式系统开发软件解决方案供应商IAR宣布&#xff0c;对瑞萨RH850 MCU的开发工具链进行多项功能增强。作为IAR嵌入式开发平台的重要组成部分&#xff0c;广泛应用于汽车领域的RH850架构现已获得多项现代化开发能力支持&#xff0c;包括云端授权、容器化支持和CI/CD集…

作者头像 李华