给你一个 m x n
的网格图 classroom
,其中一个学生志愿者负责清理散布在教室里的垃圾。网格图中的每个单元格是以下字符之一:
'S'
:学生的起始位置'L'
:必须收集的垃圾(收集后,该单元格变为空白)'R'
:重置区域,可以将学生的能量恢复到最大值,无论学生当前的能量是多少(可以多次使用)'X'
:学生无法通过的障碍物'.'
:空白空间同时给你一个整数 energy
,表示学生的最大能量容量。学生从起始位置 'S'
开始,带着 energy
的能量出发。
每次移动到相邻的单元格(上、下、左或右)会消耗 1 单位能量。如果能量为 0,学生此时只有处在 'R'
格子时可以继续移动,此区域会将能量恢复到 最大 能量值 energy
。
返回收集所有垃圾所需的 最少 移动次数,如果无法完成,返回 -1
。
示例 1:
输入: classroom = ["S.", "XL"], energy = 2
输出: 2
解释:
(0, 0)
开始,带着 2 单位的能量。(1, 0)
有一个障碍物 'X',学生无法直接向下移动。(0, 0)
→ (0, 1)
,消耗 1 单位能量,剩余 1 单位。(0, 1)
→ (1, 1)
,收集垃圾 'L'
。示例 2:
输入: classroom = ["LS", "RL"], energy = 4
输出: 3
解释:
(0, 1)
开始,带着 4 单位的能量。(0, 1)
→ (0, 0)
,收集第一个垃圾 'L'
,消耗 1 单位能量,剩余 3 单位。(0, 0)
→ (1, 0)
,到达 'R'
重置区域,恢复能量为 4。(1, 0)
→ (1, 1)
,收集第二个垃圾 'L'
。示例 3:
输入: classroom = ["L.S", "RXL"], energy = 3
输出: -1
解释:
没有有效路径可以收集所有 'L'
。
提示:
1 <= m == classroom.length <= 20
1 <= n == classroom[i].length <= 20
classroom[i][j]
是 'S'
、'L'
、'R'
、'X'
或 '.'
之一1 <= energy <= 50
'S'
。'L'
单元格。