发布时间:2026/8/23 7:47:35
Kimi    LeetCode LCP 31. 变换的迷宫 Java实现 以下是 LeetCode LCP 31. 变换的迷宫 的 Java 实现。题目回顾迷宫为 N \times M地形随时间变化。小力从 (0,0) 出发出口始终在 (n-1,m-1)。每时刻可选择上下左右移动一步或停留原地。有两个魔法卷轴各可使用一次- 临时消除术将指定位置在下一个时刻变为空地- 永久消除术将指定位置永久变为空地判断在迷宫变化结束前含最后时刻能否到达出口。解题思路采用分层图 BFS状态扩展思想- 状态定义为 (时刻 i, 坐标 x, y, 卷轴使用情况 s)- s 有 4 种- 0 NONE_USED未使用任何卷轴- 1 ONLY_TEMP已使用临时消除术- 2 ONLY_PERM已使用永久消除术- 3 TEMP_PERM两个都已使用- 对于永久消除术需要记录消除的位置 (px, py)因为之后该位置在所有时刻都变为空地。- 每个时刻可以向 5 个方向扩展上下左右 停留。Java 实现javaimport java.util.*;class Solution {// 四个方向 停留private static final int[] DX {0, 0, 1, -1, 0};private static final int[] DY {1, -1, 0, 0, 0};// 卷轴使用状态private static final int NONE_USED 0; // 未使用private static final int ONLY_TEMP 1; // 只用临时private static final int ONLY_PERM 2; // 只用永久private static final int TEMP_PERM 3; // 两个都用了// 状态值到达该状态的最小步数以及永久消除的位置private static class StateValue {int dist; // 到达该状态的最小步数int px, py; // 永久消除的位置ONLY_PERM/TEMP_PERM时有效StateValue(int dist, int px, int py) {this.dist dist;this.px px;this.py py;}}// BFS 状态private static class State {int layer; // 当前时刻int x, y; // 当前坐标int sc; // 卷轴使用状态StateValue val; // 状态值State(int layer, int x, int y, int sc, StateValue val) {this.layer layer;this.x x;this.y y;this.sc sc;this.val val;}}public boolean escapeMaze(ListListString maze) {int layers maze.size();int r maze.get(0).size();int c maze.get(0).get(0).length();// f[i][x][y][sc] 表示时刻 i在 (x,y)卷轴状态为 sc 的最优状态// 由于 layers 100, r,c 50可以用四维数组StateValue[][][][] f new StateValue[layers][r][c][4];// 初始化for (int i 0; i layers; i) {for (int x 0; x r; x) {for (int y 0; y c; y) {for (int sc 0; sc 4; sc) {f[i][x][y][sc] new StateValue(Integer.MAX_VALUE, -1, -1);}}}}// 起点(0,0)时刻0未使用卷轴步数为0f[0][0][0][NONE_USED] new StateValue(0, -1, -1);QueueState q new LinkedList();q.offer(new State(0, 0, 0, NONE_USED, f[0][0][0][NONE_USED]));while (!q.isEmpty()) {State cur q.poll();int cl cur.layer;int cx cur.x;int cy cur.y;int csc cur.sc;StateValue cval cur.val;int nextLayer cl 1;if (nextLayer layers) continue; // 超出时间范围for (int dir 0; dir 5; dir) {int nx cx DX[dir];int ny cy DY[dir];// 越界检查if (nx 0 || nx r || ny 0 || ny c) continue;char cell maze.get(nextLayer).get(nx).charAt(ny);// 情况1下一时刻该位置是空地可以直接走if (cell .) {if (cval.dist 1 f[nextLayer][nx][ny][csc].dist) {f[nextLayer][nx][ny][csc] new StateValue(cval.dist 1, cval.px, cval.py);q.offer(new State(nextLayer, nx, ny, csc, f[nextLayer][nx][ny][csc]));}continue;}// 情况2下一时刻该位置是陷阱 #// 子情况2.1已经用了永久消除术且消除的就是这个位置if (csc ONLY_PERM || csc TEMP_PERM) {if (cval.px nx cval.py ny) {// 永久消除的位置可以通行if (cval.dist 1 f[nextLayer][nx][ny][csc].dist) {f[nextLayer][nx][ny][csc] new StateValue(cval.dist 1, cval.px, cval.py);q.offer(new State(nextLayer, nx, ny, csc, f[nextLayer][nx][ny][csc]));}continue;}}// 子情况2.2使用卷轴来通过// 2.2a当前只用了临时可以在这里用永久消除术if (csc ONLY_TEMP) {// 使用永久消除术将 (nx, ny) 永久消除if (cval.dist 1 f[nextLayer][nx][ny][TEMP_PERM].dist) {f[nextLayer][nx][ny][TEMP_PERM] new StateValue(cval.dist 1, nx, ny);q.offer(new State(nextLayer, nx, ny, TEMP_PERM, f[nextLayer][nx][ny][TEMP_PERM]));}}// 2.2b当前只用了永久可以在这里用临时消除术if (csc ONLY_PERM) {// 使用临时消除术下一时刻该位置变为空地if (cval.dist 1 f[nextLayer][nx][ny][TEMP_PERM].dist) {f[nextLayer][nx][ny][TEMP_PERM] new StateValue(cval.dist 1, cval.px, cval.py);q.offer(new State(nextLayer, nx, ny, TEMP_PERM, f[nextLayer][nx][ny][TEMP_PERM]));}}// 2.2c当前什么都没用可以选择用临时或永久if (csc NONE_USED) {// 使用临时消除术if (cval.dist 1 f[nextLayer][nx][ny][ONLY_TEMP].dist) {f[nextLayer][nx][ny][ONLY_TEMP] new StateValue(cval.dist 1, -1, -1);q.offer(new State(nextLayer, nx, ny, ONLY_TEMP, f[nextLayer][nx][ny][ONLY_TEMP]));}// 使用永久消除术if (cval.dist 1 f[nextLayer][nx][ny][ONLY_PERM].dist) {f[nextLayer][nx][ny][ONLY_PERM] new StateValue(cval.dist 1, nx, ny);q.offer(new State(nextLayer, nx, ny, ONLY_PERM, f[nextLayer][nx][ny][ONLY_PERM]));}}}}// 检查是否能在任意时刻到达终点for (int i 0; i layers; i) {for (int sc 0; sc 4; sc) {if (f[i][r - 1][c - 1][sc].dist ! Integer.MAX_VALUE) {return true;}}}return false;}}关键点总结要点 说明状态设计 (时刻, x, y, 卷轴状态) 四维状态类似分层图永久消除术 需要记录消除位置 (px, py)后续时刻该位置始终可通行临时消除术 只对下一个时刻有效使用后状态变为 ONLY_TEMPBFS 扩展 每时刻向 5 个方向4方向停留扩展时间复杂度 O(layers \times r \times c \times 4 \times 5)在数据范围内可接受示例验证输入 输出 解释[[.#.,#..],[...,.#.],[.##,.#.],[..#,.#.]] true 可以在时刻3到达终点[[.#.,...],[...,...]] false 时间不够无法到达示例37层大迷宫 false 道路不通无法到达

相关新闻

2026/8/23 7:47:35

在线文档厂商怎么判断实力?先看这5项证据

先看判断逻辑 企业挑在线文档厂商,真正该问的往往不是“界面顺不顺手”,而是它能不能进入组织内部的协作、权限和安全体系。能否做企业级项目,看的也不只是编辑能力,而是资质、交付、系统兼容、数据安全、部署周期和权限管理这些硬…

2026/8/23 7:42:34

关于root账号下cron任务不执行问题处理

今天业务反馈某个定时任务不生效了。重新去查看配置定时任务, 执行命令sudo crontab -e 时提示如下错误:鉴定令牌不再有效;需要新的鉴定令牌 You (root) are not allowed to access to (crontab) because of pam configuration.问题排查过程:然后就检查当前用户下的…

2026/8/23 8:52:39

嵌入式Linux开发环境搭建:从交叉编译到Qt部署全流程详解

1. 从零到一:为什么嵌入式Linux开发离不开Qt? 如果你刚接触嵌入式Linux开发,可能会被一堆名词搞晕:交叉编译、根文件系统、FrameBuffer、Wayland…… 然后你发现,要在那块小小的开发板上显示一个带按钮的窗口&#xf…

2026/8/23 8:52:39

LightGBM在时间序列预测中的实战应用:以全球气温预测为例

1. 从赛题到模型:一次完整的数据建模实战复盘 去年带队参加亚太杯数学建模竞赛,我们组选的正是C题——全球气温预测。这道题乍一看是经典的时间序列预测问题,但深入下去,你会发现它远不止套个ARIMA或LSTM那么简单。它考察的是从数…

2026/8/23 8:52:39

STM32 SD 卡 + FatFS 实战:掉电丢数据?f_sync 和簇对齐写救你

给温控器加数据记录功能那次,客户要求"断电前至少保留最近 1000 条记录"。我一开始用片上 Flash 轮流擦两页存,每条 16 字节,两页一共只能存 128 条。后来换了 SD 卡,FatFS 一挂,f_open 一个 CSV 文件一行行…

2026/8/23 8:52:39

深入解析JavaScript原型链继承:从原理到ES6 Class的底层实现

1. 从“对象”到“继承”:为什么我们需要原型链? 如果你写过一段时间的JavaScript,尤其是从其他语言(比如Java、C#)转过来的,大概率会对JS的“面向对象”感到困惑。我们明明可以用 function 定义一个“类…

2026/8/23 8:52:39

大模型后训练评估缺失:从静态测试到动态监控的工程实践

在实际的大模型应用开发中,我们常常遇到一个令人困惑的现象:一个在标准测试集上表现优异的模型,一旦部署到真实业务场景,其表现就可能大打折扣,甚至出现一些意想不到的“愚蠢”错误。这背后不仅仅是数据分布差异的问题…

2026/8/23 8:47:39

大模型岗位解析:行业现状、转型路径与求职策略

1. 大模型岗位全景解析:行业现状与转型机遇最近两年,AI大模型技术正在重塑整个科技行业的就业格局。作为从业十余年的技术人,我亲眼见证了从传统机器学习岗位到大模型相关岗位的快速迭代。目前头部科技公司的大模型相关岗位平均薪资比传统AI岗…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/21 15:40:01

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/23 4:22:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…