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

一、问题描述

二、解题思路

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);
                }
            }

        }
    }
}

四、刷题链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/702004.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小程序中如何设置实体会员卡和线上会员卡一样

在小程序中给客户发电子会员卡&#xff0c;是非常方便和快捷的。除了发放电子会员卡&#xff0c;有些商家还希望能够发放实体会员卡。但实体会员卡如何与小程序中的会员卡号一一对应&#xff0c;是一个重要的问题。下面就具体介绍怎么设置实体会员卡和线上会员卡一样。 1. 领取…

包装类:基本数据类型对应的对象

integer 底层原理&#xff1a; 自动装箱与拆箱&#xff08;JDK5以后&#xff09; 成员方法&#xff1a;类型转换最重要 改写键盘录入&#xff1a;利用nextline

HX519 防倒流数据线芯片IC

一般概述 苹果iPhone防倒流数据线芯片&#xff0c;可完美支持iPhone、iPad、iPod等8针闪电接口的数据传输同步功能及充电功能。 特点 ❥集成度高&#xff0c;极少的外围元器件。 ❥电路简单&#xff0c;价格优势明显。 ❥稳定性高&#xff0c;兼容性强。 ❥与市面上普通…

新渠道+1!TDengine Cloud 入驻 Azure Marketplace

近日&#xff0c;TDengine Cloud 正式入驻微软云 Marketplace&#xff0c;为全球更多用户带来全托管的时序数据处理服务。这一举措也丰富了 TDengine 的订阅渠道&#xff0c;为用户提供了极大的便捷性。现在&#xff0c;您可以通过微软云 Marketplace 轻松订阅并部署 TDengine …

生产环境部署meilisearch(Running a self-hosted Meilisearch project in production)

官网的第一手资料学新技术&#xff1a;meilisearch官方文档 安装的官网地址&#xff1a;meilisearch安装的官网 部署在生产环境的指导&#xff1a;meilisearch部署在生产环境的指导 Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重…

导出 Whisper 模型到 ONNX

前言 在语音识别领域&#xff0c;Whisper 模型因其出色的性能和灵活性备受关注。为了在更多平台和环境中部署 Whisper 模型&#xff0c;导出为 ONNX 格式是一个有效的途径。ONNX&#xff08;Open Neural Network Exchange&#xff09;是一个开放格式&#xff0c;支持不同的深度…

TPM管理对于提高设备综合效率(OEE)有哪些帮助?

在当今高度自动化的生产环境中&#xff0c;设备综合效率&#xff08;OEE&#xff09;是衡量企业生产效率的关键指标。而TPM&#xff08;全面生产维护&#xff09;设备管理作为一种先进的设备管理方法&#xff0c;正成为众多企业提升OEE、优化生产流程的重要工具。本文将详细探讨…

爱奇艺万能联播无法启动的方法(好用)

winR输入 %appdata%\IQIYI Video 会打开爱奇艺的打开文件夹 点开就能打开爱奇艺万能联播啦啦啦啦啦

DDei在线设计器-属性编辑器

DDei-Core-属性编辑器 DDei-Core-属性编辑器插件包含了文本、大文本、数值、下拉、单选、勾选以及颜色等属性编辑。 图形和属性共同构成一个完整的定义&#xff0c;属性编辑器就是编辑属性值的控件。当选中图形实例时&#xff0c;属性面板就会展现当前实例的所有属性以及属性编…

攻防世界:Misc 解析(一)

前言 攻防世界是一个CTF&#xff08;Capture The Flag&#xff09;比赛平台&#xff0c;提供了一系列网络安全挑战题目&#xff0c;供安全爱好者进行实战演练和技术提升。 攻防世界的题目种类丰富多样&#xff0c;涵盖了网络安全领域的多个方面&#xff0c;包括但不限于Web安…

PWN环境配置

虚拟机安装 镜像下载网站(http://old-releases.ubuntu.com/releases/)虚拟机建议硬盘 256 G 以上&#xff0c;内存也尽量大一些。硬盘大小只是上界&#xff0c;256 G 不是真就占了 256G&#xff0c;而后期如果硬盘空间不足会很麻烦。lsb_release -a查看版本更换 ubuntu 镜像源…

批量文件重命名软件

因为日常用电脑的时候,经常都会遇到需要对当前目录下的文件,进行重命名。最好是按照自己的规则上来进行批量重命名。我试了几款软件,都感觉不是很好,不是要收费,就是各种乱七八糟的流氓广告。本想着干脆自己写算了,在绝望之际,找到了这款软件,亲测,确实还用,特别是满…

Python基础教程(十四):OS 文件/目录方法

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

matlab模拟闪电效果,分形几何

介绍 今日北京雷暴雨&#xff0c;从闪电中想到了今天想发一篇关于模拟闪电的matlab文章&#xff0c; 闪电跟人类神经元链接的样子非常相似&#xff0c;它们都属于分形几何的范畴。 分形几何 分形几何是一种复杂的几何结构&#xff0c;它在不同的尺度上具有自相似性。即&…

WPF界面设计

1、使用C#-WPF实现抽屉效果-炫酷漂亮的侧边栏导航菜单-SplitViewMD主题重绘原生控件的美观效果-提供源码Demo下载 码源地址&#xff1a;https://download.csdn.net/download/Prince999999/89424685 2、使用C#-WPF实现抽屉效果-菜单导航功能实现&#xff0c;常规的管理系统应该…

使用ecal后导致cmake项目的RelWithDebInfo编译类型会报依赖库NOTFOUND错误

cmake项目的RelWithDebInfo编译类型会报依赖库NOTFOUND&#xff0c;Release类型却正常&#xff0c;哪怕该依赖库是RelWithDebInfo类型编译的。 原因&#xff1a;eCAL的cmake脚本强行把Debug/Release之外的类型映射为Release了&#xff1b;如果依赖库以Release类型编译安装就能…

大众点评全国酒店POI采集146万家-2024年5月底

大众点评全国酒店POI采集146万家-2024年5月底 店铺POI点位示例&#xff1a; 店铺id k8sp5Gm38dMqzlFf 店铺名称 广州长隆熊猫酒店 十分制服务评分 9.4 十分制环境评分 9.4 十分制划算评分 9.4 人均价格 - 评价数量 13333 店铺地址 汉溪大道东299号 店铺类型 豪华型 …

【启明智显实战指南】SSD202D方案双网口开发板烧录全攻略---从入门到精通

提示&#xff1a;作为Espressif&#xff08;乐鑫科技&#xff09;大中华区合作伙伴及sigmastar&#xff08;厦门星宸&#xff09;VAD合作伙伴&#xff0c;我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…

满屏假算力 全都是泡沫!

A股如戏&#xff0c;全靠演技。拖了半个月&#xff0c;去年的大牛股鸿博&#xff08;股份&#xff09;摊牌&#xff0c;明确回复深交所年报问询函&#xff0c; 洋洋洒洒那么多字&#xff0c;意思就是不想搞算力了&#xff0c;也不想对之前签署的合同履约&#xff0c;那些年吹过…

3D交互软件有哪些?哪个比较简单好学?

一个物理实验的仿真&#xff0c;要求做出来的结果是可以在电脑上完成实验&#xff0c;也就是通过操作实验器材让表盘上的表针按照实际的情况运动。实验器材的模型已经用3Dmax做出来了&#xff0c;请问用什么软件能方便的做到3D交互呢&#xff1f;最好是有中文的。 已经有制作好…