Kimi    LeetCode 3459. 最长 V 形对角线段的长度 Java实现 LeetCode 3459. 最长 V 形对角线段的长度 — Java 实现题目概述- 给定 n × m 的矩阵 grid元素值为 0、1 或 2。- V 形对角线段 规则- 必须从 1 开始。- 后续元素按 2, 0, 2, 0, ... 交替。- 沿四个对角线方向之一移动。- 最多允许一次顺时针 90° 转向。- 返回最长合法路径的长度不存在则返回 0。---核心思路DFS 记忆化搜索状态定义memo[i][j][dir][turn] 表示从位置 (i, j) 出发当前移动方向为 dir是否还能转向 turn0/1时往后能延伸的最长路径长度。四个对角方向按顺时针排列- 0: 右下 (1, 1)- 1: 左下 (1, -1)- 2: 左上 (-1, -1)- 3: 右上 (-1, 1)顺时针 90° 转向dir → (dir 1) % 4目标值计算- 当前值为 1 → 下一步期望 2- 当前值为 2 → 下一步期望 0- 当前值为 0 → 下一步期望 2- 统一公式next grid[i][j] 1 ? 2 : (2 - grid[i][j])递归逻辑1. 沿当前方向前进一步检查是否越界且值匹配。2. 选择一继续直行。3. 选择二若还能转向则顺时针转 90° 后继续。4. 取两者最大值 1当前步。---Java 代码javaclass Solution {// 四个对角方向右下、左下、左上、右上顺时针排列private static final int[][] DIRS {{1, 1}, {1, -1}, {-1, -1}, {-1, 1}};// 记忆化数组memo[i][j][dir][turn]// turn1 表示还能转向turn0 表示已转过private int[][][][] memo;private int[][] grid;private int m, n;public int lenOfVDiagonal(int[][] grid) {this.grid grid;this.m grid.length;this.n grid[0].length;// 初始化记忆化数组-1 表示未计算memo new int[m][n][4][2];for (int i 0; i m; i) {for (int j 0; j n; j) {for (int d 0; d 4; d) {memo[i][j][d][0] -1;memo[i][j][d][1] -1;}}}int ans 0;// 枚举所有起点值为 1 的位置for (int i 0; i m; i) {for (int j 0; j n; j) {if (grid[i][j] 1) {// 尝试四个初始方向for (int d 0; d 4; d) {// 1 包含起点本身ans Math.max(ans, dfs(i, j, d, 1) 1);}}}}return ans;}/*** 返回从 (i, j) 出发沿方向 dir是否还能转向 turn 时* 后续路径的最大长度不包含当前点*/private int dfs(int i, int j, int dir, int turn) {// 计算下一步坐标int ni i DIRS[dir][0];int nj j DIRS[dir][1];// 计算下一步期望值int target grid[i][j] 1 ? 2 : (2 - grid[i][j]);// 越界或值不匹配路径终止if (ni 0 || ni m || nj 0 || nj n || grid[ni][nj] ! target) {return 0;}// 检查记忆化if (memo[ni][nj][dir][turn] ! -1) {return memo[ni][nj][dir][turn];}// 选择一继续直行int res dfs(ni, nj, dir, turn);// 选择二若还能转向顺时针转 90° 后继续if (turn 1) {int turnRes dfs(ni, nj, (dir 1) % 4, 0);res Math.max(res, turnRes);}// 记忆化并返回1 包含当前步 ni,njmemo[ni][nj][dir][turn] res 1;return res 1;}}---复杂度分析指标 复杂度 说明时间 O(n × m × 4 × 2) O(nm) 每个状态 (i, j, dir, turn) 只计算一次空间 O(n × m × 4 × 2) O(nm) 记忆化数组---验证示例输入 输出 说明[[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]] 5 (0,2)→(1,3)→(2,4) 右转后 (3,3)→(4,2)[[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]] 4 (2,3)→(3,2) 右转后 (2,1)→(1,0)[[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]] 5 不转向直走 (0,0)→(1,1)→(2,2)→(3,3)→(4,4)[[1]] 1 只有起点---参考来源- 灵茶山艾府题解中的记忆化搜索思路- walkccc 题解中的 C 实现参考- Progiez 的 Java 实现参考

相关新闻

最新新闻

LLC设计指南(九)第九章:真正开始讲 LLC 的变压器——为什么它比 Flyback 难十倍?

LLC设计指南(九)第九章:真正开始讲 LLC 的变压器——为什么它比 Flyback 难十倍?

第九章:真正开始讲 LLC 的变压器——为什么它比 Flyback 难十倍? 如果说: Lr Lm Cr是 LLC 的灵魂。 那么: 变压器就是 LLC 的心脏。 很多工程师第一次做 LLC。 最大的误判是: “变压器嘛,不就是隔离、变压?” 结果: 打样回来: 频率飘 效率低 发热 轻载啸叫 ZVS …

2026/7/4 4:45:37
Java并发:并发容器与框架完全解析

Java并发:并发容器与框架完全解析

一、并发容器和框架的定义及优势 在传统的多线程编程中,为了保证共享数据的线程安全,开发者必须手动编写同步代码,例如使用synchronized或Lock对临界区进行加锁。这种方式不仅容易出错,还会降低程序的性能。并发容器和框架的出现…

2026/7/4 4:45:37
第 26 篇:区域采样统计—马赛克、彩色玻璃与油画效果

第 26 篇:区域采样统计—马赛克、彩色玻璃与油画效果

区域采样统计—马赛克、彩色玻璃与油画效果 系列导语:本文是"有趣的图像处理"系列第 26 篇。主题是三种视觉风格化效果背后统一的数学框架:区域采样统计——把图像划分为若干区域,用区域内像素的某种统计量来替换颜色,不…

2026/7/4 4:45:37
告别多款解压软件!这款全能压缩工具,单 / 批量处理都顺手

告别多款解压软件!这款全能压缩工具,单 / 批量处理都顺手

日常办公、整理资料、传输文件,压缩和解压几乎是每天都要用到的操作。系统自带工具功能简陋,大文件压缩慢、批量文件只能逐个处理,第三方软件又常捆绑广告、弹窗不断,体验很糟心。今天给大家分享一款干净又好用的工具 ——鲲鹏压缩…

2026/7/4 4:45:37
段永平重仓泡泡玛特,情绪消费这门生意彻底被看懂了

段永平重仓泡泡玛特,情绪消费这门生意彻底被看懂了

段永平增持泡泡玛特这件事,这两天在投资圈和消费品行业都引起了很大讨论。根据公开披露信息,2026年5月25日,段永平及其相关投资主体增持泡泡玛特,持股比例达到5.69%,触发港股权益披露要求,并被多家媒体称为…

2026/7/4 4:45:37
《超简单:用 Python 让 Excel 飞起来》读书笔记:第7章 案例02 在 Python 中导入 Excel 数据制作简单的图表

《超简单:用 Python 让 Excel 飞起来》读书笔记:第7章 案例02 在 Python 中导入 Excel 数据制作简单的图表

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…

2026/7/4 4:40:37

周新闻

月新闻