当前位置: 首页 > news >正文

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; }
http://www.jsqmd.com/news/140226/

相关文章:

  • ubuntu安装PostgreSQL
  • 微信小程序uniapp-vue运动健身户外运动体能训练系统
  • 2025年华南师范大学计算机考研复试机试真题(附 AC 代码 + 解题思路)
  • 基于SpringBoot的海洋环保小程序系统(毕业设计项目源码+文档)
  • 微信小程序uniapp-vue音乐播放器
  • 靠谱的口碑靠前不踩雷大落地窗品牌杰出生产厂家
  • 12月25日记
  • 方达炬 发明一批指标
  • C语言(一)
  • 微信小程序uniapp-vue自驾游资助定制游旅游线路景点评论系统
  • Linux Kernel (一) 计算机启动流程简述
  • 【图像处理基石】什么是神经渲染?
  • 微信小程序uniapp-vue英语学习小助手的设计
  • 1.1 一维数组(markdown版)
  • 基于SpringBoot的公司财务预算管理系统(毕业设计项目源码+文档)
  • HBase与Jupyter:交互式数据分析
  • 基于SpringBoot的顾客偏好的唯品会推荐系统设计与实现(毕业设计项目源码+文档)
  • AI生成系统架构图 告别系统架构图制作焦虑!AI一键生成,小白也能秒变高手
  • 为什么 Go 没有依赖注入和 Bean 机制?语言设计哲学对比 - 若
  • 案例:扩容数据免迁移方案
  • 基于SpringBoot的果蔬仓储管理系统的设计与实现(毕业设计项目源码+文档)
  • 可持续发展目标对公司估值的长期影响
  • Java-Spring Bean 自动启动机制详解 - 从原理到实践 - 若
  • 数字
  • 12月24日日记
  • 昇腾 NPU 环境下 GPT-2 模型本地部署全指南(含踩坑排错)
  • 《具身智能》读书笔记
  • PhysicReviewsNotes
  • 2025最新!专科生必看9大AI论文平台测评与推荐
  • 150_尚硅谷_数组应用实例(2)