news 2026/4/18 7:48:34

leetcode热题岛屿数量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
leetcode热题岛屿数量

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

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

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

示例 1:

输入:grid = [ ['1','1','1','1','0'], ['1','1','0','1','0'], ['1','1','0','0','0'], ['0','0','0','0','0'] ]输出:1

示例 2:

输入:grid = [ ['1','1','0','0','0'], ['1','1','0','0','0'], ['0','0','1','0','0'], ['0','0','0','1','1'] ]输出:3
/** * 深度优先求岛屿个数 * @param grid * @return */ public int numIslands(char[][] grid) { int count = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[0].length; j++) { if (grid[i][j] == '1') { deleteSideOne(grid,i,j); count++; } } } return count; } /** * 广度优先岛屿个数 * @param grid * @return */ public int numIslands1(char[][] grid) { int count = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[0].length; j++) { if (grid[i][j] == '1') { deleteSideOneDfs(grid,i,j); count++; } } } return count; } private void deleteSideOneDfs(char[][] grid, int i, int j) { Queue<int[]> list = new LinkedList<>(); list.add(new int[] {i,j}); if (!list.isEmpty()) { int[] cur = list.remove(); i = cur[0];j = cur[1]; if (inArea(grid,i,j) && grid[i][j] == '1') { grid[i][j] = '0'; list.add(new int[] {i+1,j}); list.add(new int[] {i-1,j}); list.add(new int[] {i,j+1}); list.add(new int[] {i,j-1}); } } } private void deleteSideOne(char[][] grid, int i, int j) { if (!inArea(grid,i,j) || grid[i][j] == '0') { return; } // 此时 = ‘1’ grid[i][j] = '0'; deleteSideOne(grid,i,j-1); deleteSideOne(grid,i,j+1); deleteSideOne(grid,i-1,j); deleteSideOne(grid,i+1,j); } /** * 岛屿的最大面积 * @param grid * @return */ public int maxAreaOfIsland(int[][] grid) { int res = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[0].length; j++) { if (grid[i][j] == 1) { int tempA = area(grid,i,j); res = Math.max(res,tempA); } } } return res; } private int area(int[][] grid, int i, int j) { // 超出网格,返回0 if (!inArea(grid, i, j)) { return 0; } // 如果不是岛屿,返回0 if (grid[i][j] != 1) { return 0; } // 递归计算相邻的是否岛屿(加上相邻的面积) return 1 + area(grid, i - 1, j) + area(grid, i + 1, j) + area(grid, j, j - 1) + area(grid, i, j + 1); } private boolean inArea(int[][] grid, int i, int j) { return i >= 0 && i < grid.length && j >= 0 && j < grid[0].length; } private boolean inArea(char[][] grid, int i, int j) { return i >= 0 && i < grid.length && j >= 0 && j < grid[0].length; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:13:15

江苏诚信的港澳台联考机构哪家专业

江苏诚信的港澳台联考机构哪家专业在江苏&#xff0c;随着越来越多的港澳台学子希望通过港澳台联考实现内地高校求学梦&#xff0c;选择一家专业诚信的港澳台联考机构变得至关重要。目前众多机构林立&#xff0c;上海心叶教育凭借多年积累的深厚底蕴和出色的教学成果脱颖而出&a…

作者头像 李华
网站建设 2026/4/18 5:13:13

软件缺少vfp9r.dll文件 无法启动运行问题 下载修复方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/18 5:12:52

别只测功能:一套可落地的鸿蒙分布式压力测试方案

摘要 随着鸿蒙系统在多设备、多终端场景下的应用越来越多&#xff0c;分布式能力已经不再是“演示功能”&#xff0c;而是直接跑在真实业务里的核心能力。 但在实际开发中&#xff0c;很多项目在功能跑通之后&#xff0c;很少系统性地去验证&#xff1a; 当设备变多、调用变频繁…

作者头像 李华
网站建设 2026/4/18 5:10:17

“十五五”背景下的智慧农机治理,从作业感知到数据驱动的农业装备升级路径

在“十五五”时期国家持续推进农业农村现代化、加快农业强国建设的整体背景下&#xff0c;农业生产体系正在经历从“机械化普及”向“智能化深化”的关键跃迁。作为农业生产中最重要的基础装备&#xff0c;农机不仅承担着耕、种、管、收等核心作业任务&#xff0c;也逐渐成为农…

作者头像 李华
网站建设 2026/4/18 5:09:28

大数据与数字孪生:工业系统仿真优化

大数据驱动数字孪生:工业系统仿真优化的实践与未来 一、摘要/引言:当工业系统有了“会思考的虚拟镜像” 清晨8点,某汽车制造工厂的生产线准时启动。与以往不同的是,中控室的屏幕上不仅显示着实时产量,还有一个1:1的虚拟生产线——它同步着每台设备的温度、转速,甚至预测…

作者头像 李华