深度遍历-求“岛屿数量”

2024-06-13 01:12
文章标签 遍历 数量 深度 岛屿

本文主要是介绍深度遍历-求“岛屿数量”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、问题描述

二、解题思路

1.设置一个对应的boolean二维数组 isfind[][] ,用来标记已经遍历过的“岛屿”

2.使用双层循环遍历岛屿(grid)二维数组,当遇到 isfind[i][j]=false 时表示遇到一个新岛屿

3.当遇到新岛屿时进行深度递归遍历,向左、向上、向下、向右尝试“走动”,当新的 i,j位置 满足:

        (1) i、j满足二维数组的索引范围

        (2)grid[i][j]==1;//当前是岛屿

        (3)isfind[i][j]==1;//当前岛屿未访问过

上面蓝色和红色就是两个不同的岛屿,同时红色在向右侧走时发现了满足条件的岛屿(红色星星标注),会合并入第二个岛屿。

三、代码实现

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 判断岛屿数量* @param grid char字符型二维数组 * @return int整型*/public int solve (char[][] grid) {int rowsize=grid.length;int colsize=grid[0].length;//设置一个对应的boolean二维数组boolean[][] isfinded=new boolean[rowsize][colsize];int islandNum=0;//双层循环遍历grid二维数组,当遇到isfind[i][j]=false时表示遇到一个新岛屿for(int i=0;i<rowsize;i++){for(int j=0;j<colsize;j++){if(grid[i][j]=='1'&&!isfinded[i][j]){islandNum++;allDirectionFind(grid,i,j,isfinded);}}}return islandNum;}public void allDirectionFind(char[][] grid,int row,int col,boolean[][] isfinded){int rowsize=grid.length;int colsize=grid[0].length;if(!isfinded[row][col]){isfinded[row][col]=true;if(row+1<rowsize){//可向下if(grid[row+1][col]=='1'&&!isfinded[row+1][col]){allDirectionFind(grid,row+1,col,isfinded);}}if(row-1>=0){//可向上if(grid[row-1][col]=='1'&&!isfinded[row-1][col]){allDirectionFind(grid,row-1,col,isfinded);}}if(col+1<colsize){//可向右if(grid[row][col+1]=='1'&&!isfinded[row][col+1]){allDirectionFind(grid,row,col+1,isfinded);}}if(col-1>=0){//可向左if(grid[row][col-1]=='1'&&!isfinded[row][col-1]){allDirectionFind(grid,row,col-1,isfinded);}}}}
}

四、刷题链接

岛屿数量_牛客题霸_牛客网

这篇关于深度遍历-求“岛屿数量”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055871

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

韦季李输入法_输入法和鼠标的深度融合

在数字化输入的新纪元,传统键盘输入方式正悄然进化。以往,面对实体键盘,我们常需目光游离于屏幕与键盘之间,以确认指尖下的精准位置。而屏幕键盘虽直观可见,却常因占据屏幕空间,迫使我们在操作与视野间做出妥协,频繁调整布局以兼顾输入与界面浏览。 幸而,韦季李输入法的横空出世,彻底颠覆了这一现状。它不仅对输入界面进行了革命性的重构,更巧妙地将鼠标这一传统外设融入其中,开创了一种前所未有的交互体验。 想象

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口