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

【LeetCode - 每日1题】求网格最长V形对角线段的长度

🌈 个人主页:(时光煮雨)
🔥 高质量专栏:vulnhub靶机渗透测试
👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)


🌵目录🌵

  • 难度 ⭐⭐⭐⭐⭐
  • 前言
  • ✅ 题目回顾
    • 🎯 任务目标:
  • ✅ 示例分析
    • ✅ 示例 1
    • ✅ 示例 2
    • ✅ 示例 3
    • ✅ 示例 4
  • ✅ 解题思路
    • 🍒 核心逻辑
  • ✅ 代码实现
  • ✅ 代码说明
  • ✅ 复杂度分析
  • ✅ 测试用例验证
    • ✅ 示例 1
    • ✅ 示例 2
    • ✅ 示例 3
    • ✅ 示例 4
  • ✅ 总结
  • 🤝 期待与你共同进步
  • 📚 参考文档


难度 ⭐⭐⭐⭐⭐

前言


欢迎阅读本篇题解!本文将详细解析如何寻找网格中最长的"V对角线"路径。该问题要求我们在网格中找到由交替的1和2组成的路径,路径只能沿对角线方向移动,且最多只能右转一次。这是一个具有挑战性的网格路径搜索问题,需要高效地探索所有可能路径。我们将使用深度优先搜索(DFS)结合记忆化技术来优化解决方案。


✅ 题目回顾


🎯 任务目标:

给定一个二维网格 grid,其中每个单元格的值为1或2。找到最长的"V对角线"路径,该路径满足:

  • 从值为1的单元格开始。
  • 路径上的值交替出现(1后必须是2,2后必须是1)。
  • 路径只能沿对角线方向移动(四个方向:右下、左下、左上、右上)。
  • 路径在移动过程中最多只能右转一次(改变方向一次)。

返回最长路径的长度。


✅ 示例分析


✅ 示例 1

输入:grid = [[2,2,1,2,2],[2,0,2,2,0],[2,0,1,1,0],[1,0,2,2,2],[2,0,0,2,2]]
输出:3
解释:从网格中的某个1开始,可以找到长度为3的路径,例如从(0,2)开始,向右下移动到(1,3)值为2,然后继续向右下或右转。


✅ 示例 2

输入:grid = [[2,2,2,2,2],[2,0,2,2,0],[2,0,1,1,0],[1,0,2,2,2],[2,0,0,2,2]]
输出:3
解释:类似示例1,存在长度为3的路径。


✅ 示例 3

输入:grid = [[1,2,2,2,2],[2,2,2,2,0],[2,0,0,0,0],[0,0,2,2,2],[2,0,0,2,0]]
输出:1
解释:没有更长的路径,只有起点本身。


✅ 示例 4

输入:grid = [[1]]
输出:1
解释:只有一个单元格,路径长度为1。


✅ 解题思路


🍒 核心逻辑

为了解决这个问题,我们需要遍历网格中的每个单元格作为起点,但只有值为1的单元格才能作为起点。对于每个起点,我们尝试四个初始方向,然后使用DFS来探索路径。在DFS过程中,我们检查下一个单元格是否在网格内且值是否符合预期(交替的1或2)。我们允许直行或右转(如果还没有右转过),并记录路径长度。使用记忆化来避免重复计算相同状态。

关键点:

  • 状态包括当前坐标、方向、是否还可以右转、以及下一个目标值。
  • 方向有四个,使用方向向量表示移动。
  • 目标值交替:当前值为1时,下一个目标值为2;当前值为2时,下一个目标值为1。代码中使用3 - target来实现交替。

✅ 代码实现


from functools import cache
from typing import Listclass Solution:def lenOfVDiagonal(self, grid: List[List[int]]) -> int:DIRS = ((1, 1), (1, -1), (-1, -1), (-1, 1))m, n = len(grid), len(grid[0])
http://www.dtcms.com/a/353193.html

相关文章:

  • 页面跳转html
  • HTML响应式设计的颜色选择器,适配各种屏幕尺寸
  • rk3588 ubuntu20.04屏幕显示问题解决
  • CPU-IO-网络-内核参数的调优
  • AOSP 编译系统 (Android build system)
  • 嵌入式C语言进阶:位操作的艺术与实战
  • 【测试】pytest测试环境搭建
  • Linux 离线环境下 Anaconda3 与核心机器学习库(scikit-learn/OpenCV/PyTorch)安装配置指南
  • 解决Visual Studio中UWP设计器无法显示的问题:需升级至Windows 11 24H2
  • 【SQL优化案例】SQL执行频率问题与优化效果预期
  • NumPy/PyTorch/C char数组内存排布
  • 网站防爆破安全策略分析
  • python项目开发:创建虚拟环境
  • 利用机器学习优化Backtrader策略原理与实践
  • 深入解析函数栈帧创建与销毁
  • 斯塔克工业技术日志:用基础模型打造 “战甲级” 结构化 AI 功能
  • 预测模型及超参数:1.传统机器学习:SVR与KNN
  • 网页版云手机怎么样
  • Enduro 克隆游戏 — 基于 HTML、CSS 与 JavaScript 的完整教程模板
  • 23种设计模式——单例模式(Singleton)​详解
  • 金仓数据库文档系统全面升级:用户体验焕然一新
  • CPU、IO、网络与内核参数调优
  • Linux 性能调优实战:CPU、磁盘 I/O、网络与内核参数
  • 系统架构设计师备考第8天——嵌入式系统
  • 工业网络安全:保护制造系统和数据
  • Linux 系统CPU-IO-网络-内核参数的调优
  • 【学习笔记】GB 42250-2022标准解析
  • 手写MyBatis第36弹:MyBatis执行流程中SQL命令类型解析
  • Effective c++ 35条款详解
  • docker run 后报错/bin/bash: /bin/bash: cannot execute binary file总结