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

【纵火犯的春天】纵火犯是如何解题leetcode的?

D4


大家好,这种理解思路是我在这道题目的评论区偶然看到的,觉得很有意思,所以打算写成题解的方式加深一下对类似题目的理解。

200.岛屿数量(原题链接)

这个题目可以考虑DFS(深度优先)解决,但是暴力好像也能做,但是非常非常繁琐,远没有递归来的简洁高效,正好这个题目也可以练习熟悉一下递归。

解题思路:

想想我们是一位纵火犯,我们的目的是烧光所有的陆地,可是现在有个问题,陆地并不全是连续的,所以就产生了岛屿,我们想要烧光每一块陆地,就必须到达一块陆地相邻的所有陆地,称之为一个“岛屿”。

海的位置是'0',未被访问的陆地的位置是'1',那我们就想,我烧完这块陆地,我就得标记一下,这里用'2'表示,下次就不用来了。之后我们要去上下左右四个方向看看周围还有没去过的陆地吗,如果有,烧掉并做标记。一段时间过后,我们发现没路了,前面是海,后面是已做好标记的烧光的陆地,那我们就要考虑停下了,这就是烧光的一整个岛屿。再去找其他还是'1'的地方(在这里我们可以for循环遍历所有地点找到),为节省时间,我们不会再踏足已烧光的岛屿,所以需要在纵火前判断一下这里是不是'1',重复以上过程。

dfs的结束条件是什么?

  • 周围都是烧光的陆地了
  • 遇到海了

细分就是数组下标越界:< 0或者>= length,因为是从0开始计数,所以达到length就已经是海了。

这个题目体现的深度优先遍历思想在于,这里比如dfs(grid, i - 1, j);//向上走,我要向上走,我就一直向上走,直到不能继续走下去。也就是优先探索某个方向到底,然后回溯

class Solution {public int numIslands(char[][] grid) {int ans = 0; //记数器for(int i = 0; i < grid.length; i++){for(int j = 0; j < grid[i].length; j++){if(grid[i][j] == '1'){//如果当前是未涉足的陆地dfs(grid, i, j);ans++;}}}return ans;}private void dfs(char[][] grid, int i, int j){if(i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] != '1'){return;}grid[i][j] = '2'; //将此地标记为已访问dfs(grid, i - 1, j);//向上走dfs(grid, i + 1, j);//向下走dfs(grid, i, j - 1);//向左走dfs(grid, i, j + 1);//向右走}
}
http://www.dtcms.com/a/318220.html

相关文章:

  • Python驱动的无人机多光谱-点云融合技术在生态三维建模与碳储量/生物量/LULC估算中的全流程实战
  • JDK9+ Method.class.getDeclaredFields() Method实例将不能再直接通过反射修改
  • 无人机航拍数据集|第4期 无人机太阳光伏板红外目标检测YOLO数据集10945张yolov11/yolov8/yolov5可训练
  • 大疆无人机使用eport连接Jetson主板实现目标检测
  • selenium操作指南
  • 前端路由守卫
  • JavaWeb服务器/servlet容器(Tomcat、Undertow 、WebLogic)
  • 前端应用场景题目(待总结优化)
  • 攻防世界WEB(新手模式)20-unseping
  • 基于 kubeadm 搭建 k8s 集群
  • 京东商品评论接口开发全指南:从数据获取到分析应用实战
  • 【20205CVPR-目标检测方向】基于事件的高效目标检测:具有空间和时间注意力的混合神经网络
  • Lodash 的终极进化Radashi
  • JAVA 程序员cursor 和idea 结合编程
  • 北京JAVA基础面试30天打卡03
  • SAP MR51 显示不是ALV格式的问题
  • 开源远程工具rustdesk
  • 力扣 hot100 Day67
  • Linux firewall 防火墙管理
  • SpringBoot 接入SSE实现消息实时推送的优点,原理以及实现
  • React:生命周期
  • 二、Istio流量治理(一)
  • 佳文鉴赏 || FD-LLM:用于机器故障诊断的大规模语言模型
  • 性能为王:一次从压测到调优的实战全流程复盘
  • PHP常用日期时间函数
  • 线程-线程池篇(二)
  • 【CSS】动态修改浏览器滚动条宽度
  • 楼宇自控系统对建筑碳中和目标的实现具重要价值
  • MCU程序的ARM-GCC编译链接
  • Powershell---替换文本文件中指定行的整行内容