力扣200. 岛屿数量(java DFS解法)

Problem: 200. 岛屿数量

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

该问题可以归纳为一类遍历二维矩阵的题目,此类中的一部分题目可以利用DFS来解决,具体到本题目:

1.我们首先要针对于二维数组上的每一个点,尝试展开DFS
2.我们定义一个和给定矩阵一样大的布尔类型的矩阵visited,用于辅助判断是否开展DFS,若是符合的合法点,则设置为true
3.我们在DFS的具体实现中,以每一个点为基础,从该点的上下左右四个方位开始尝试是否DFS

解题方法

1.定义二维辅助数组visited初始化大小为给定数组grid的大小(若在后续操作中标记某一点为true则表示该位置是已经遍历过的合法位置),定义记录岛屿数量的变量count
2.在主函数(numIslands)中我们遍历二维数组中每一个点,当满足visited[i][j] != true && grid[i][j] == '1’时,则代表此处最少存在一个岛屿count加一,再调用DFS函数
3.DFS函数的具体处理:

3.1 每次先将当前合法位置设置为true(visited中),定义一个二维数组**int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};用于记录当前某一位置的点的四个方位(上下左右)
3.2 for循环(范围1~4),循环中每次执行
int newI = i + directions[k][0];int newJ = j + directions[k][1];**用于记录当前位置的新的位置,并判断当前新位置是否合法,若合法则DFS递归调用(在新的位置的基础上)

复杂度

时间复杂度:

O ( m n ) O(mn) O(mn)

空间复杂度:

O ( m n ) O(mn) O(mn)

Code

class Solution {private boolean[][] visited;private int row;private int col;/*** Get all the island counts** @param grid Given a two-dimensional array* @return int*/public int numIslands(char[][] grid) {row = grid.length;col = grid[0].length;visited = new boolean[row][col];//The count of islandint count = 0;for (int i = 0; i < row; ++i) {for (int j = 0; j < col; ++j) {if (visited[i][j] != true && grid[i][j] == '1') {count++;dfs(grid, i, j);}}}return count;}/*** Try dfs or not from each point in a two-dimensional array** @param grid Given a two-dimensional array* @param i    Abscissa* @param j    Ordinate*/private void dfs(char[][] grid, int i, int j) {//Record four bearingsint[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};//The current legal location is set to truevisited[i][j] = true;for (int k = 0; k < 4; ++k) {int newI = i + directions[k][0];int newJ = j + directions[k][1];if (newI >= 0 && newI < row && newJ >= 0 && newJ < col&& visited[newI][newJ] == false && grid[newI][newJ] == '1') {dfs(grid, newI, newJ);}}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搜维尔科技:让鳄鱼在银幕上唱跳,奇幻电影《鳄鱼莱莱》幕后揭秘

把《鳄鱼莱莱》从儿童读物改编成真人电影&#xff0c;这绝非易事。首先需要塑造一条长一米八的鳄鱼&#xff0c;然后还能栩栩如生地唱歌跳舞&#xff0c;并与奥斯卡获奖演员哈维尔巴登&#xff08;Javier Bardem&#xff09;一起表演&#xff0c;向观众展现原作中吸引人的神奇之…

B01、JVM与Java体系结构-01

字节码与多语言混合编程 字节码概述&#xff1a; 我们平时说的java字节码&#xff0c;指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为&#xff1a;jvm字节码。不同的编译器&#xff0c;可以编译出相同的字节码文件&…

Docker实战案例研究:深入行业应用与最佳实践

Docker作为一种轻量级、可移植、可扩展的容器化技术&#xff0c;在各行各业都得到了广泛应用。本文将通过深入实际案例&#xff0c;介绍Docker在不同行业的应用以及相应的最佳实践&#xff0c;提供更加丰富的示例代码&#xff0c;以帮助大家更全面地理解和运用Docker的强大功能…

法大大邀业内大咖剖析汽车名企数智化实战路径

法大大发布中国首部《汽车行业合同数智化白皮书》&#xff0c;聚焦趋势&#xff0c;解读行业数字化转型攻坚战的破局之道&#xff1b;深入内部&#xff0c;剖析名企数字化的探索实践。 长安汽车、蔚来汽车、上汽大通、 东风汽车集团、奥托立夫、长城滨银汽金… 一众名企高层…

sqlserver dba日常操作

查询慢sql的方法 1.whoisactive 安装方法 http://whoisactive.com/downloads/下载地址 将下载好的zip包放到sqlserver服务器中 文件-打开-文件-下载好的zip包-在查询窗口点击执行 新建一个查询窗口&#xff0c;输入sp_whoisactive&#xff0c;获取当前运行的所有sql语句 使用…

宝塔部署flask项目

宝塔(bt.cn)部署flask项目&#xff0c;发现问题还挺多。不过终于是搞定了。 先可以用pycharm建一个空的flask项目&#xff0c;这样好发现问题。 到网站栏目点击python项目&#xff0c;新建一个python项目。 要选择flask框架&#xff0c;uwsgi运行方式。 端口如果选择80端口&a…

执行计划EXPLAIN详解

什么是EXPLAIN&#xff1f; EXPLAIN是MySQL提供的一条语句&#xff0c;用于详细展示MySQL如何执行一条SELECT语句。通过使用EXPLAIN&#xff0c;开发者可以看到MySQL如何处理查询及连接表&#xff0c;帮助我们诊断性能问题。 使用方法非常直接&#xff0c;只需在SELECT查询前…

儿童玩具行业分析:发展态势良好,市场空间不断拓展

玩具是有利于促进幼儿体、德、智、美的全面发展;符合儿童年龄特征&#xff0c;能满足其好奇心、好动和探索活动的愿望;造型优美&#xff0c;反映事物的典型特征;活动多变&#xff0c;有助于鼓励学习。中国玩具产品包括毛绒玩具、塑胶玩具、纸质玩具、电子玩具、木制玩具、金属玩…

虚拟机无法进入系统问题

概述 客户在华为云平台上创建了两台虚拟机并部署aarch64 V10 OS&#xff0c;2021-10-28其中一台虚拟机业务出现异常&#xff0c;运维重启虚拟机后系统进不去&#xff0c;左上角光标闪烁&#xff0c;接着重启另一台虚拟机同样起不来&#xff0c;现象一致。 分析 通过分析现场…

嵌入式Linux学习(3)——中断(Interrupt)子系统概念

目录 一. 中断概念与分类 1.1 中断分类 1.2 中断事件的处理流程 1.3 中断号(IRQ number) 1.4 中断源(Interrupt Source) 1.5 中断触发方式 二. 中断子系统架构 2.1 GIC 2.2 中断子系统架构 2.3 GIC与IP 2.3.1 典型GIC IP PLC390 GIC 400 GIC 500 REF 一. 中断概念与…

如何基于企业需求,又便宜又快地定制开发一套CRM客户管理系统?

如何基于企业需求&#xff0c;又便宜又快地定制开发一套CRM客户管理系统&#xff1f; 定制开发CRM客户管理系统是为了满足企业个性化需求而进行的&#xff0c;它可以帮助企业提高客户关系管理效率&#xff0c;提供更好的客户服务和实现精细化运营。本文将为大家介绍CRM定制开发…

TaxtArea中内嵌一张放松图片,该图片实现属性悬浮放大功能

TaxtArea中内嵌一张发送图片&#xff0c;该图片实现属性悬浮放大功能&#xff0c;离开还原效果&#xff0c;点击发送按钮后&#xff0c;发送图片变为loading&#xff0c; <div class"textarea-wrapper" ><a-textarearef"textArea"v-model.trim&q…