📅  最后修改于: 2023-12-03 15:41:01.766000             🧑  作者: Mango
给定一个初始位置 (0, 0),一个大小为 m x n
的矩阵 matrix 和一个表示一系列指令的字符串 instructions
,其中每个指令表示移动方向:
"U"
- 向上移动一格"D"
- 向下移动一格"L"
- 向左移动一格"R"
- 向右移动一格移动后,如果位置越界了(超出了矩阵的边界),则该指令将被忽略。
请你执行所有指令,然后返回你在最终到达的位置。答案坐标模 109 + 7 后返回。
输入:
m = 3, n = 6
ops = "URR"
输出:
[2, 5]
输入:
m = 2, n = 3
ops = "DDU"
输出:
[0, 2]
1 <= m, n <= 10^9
1 <= instructions.length <= 10^4
instructions[i]
只包含字符 ("U", "D", "L", "R")
根据题目要求,我们需要将从 (0, 0)
出发按照指令 instructions
进行一系列移动。移动过程中,需要不断检查当前坐标是否越界,如果越界了,该指令需要被忽略。
因此,首先需要定义一个变量 res
用来记录当前的坐标,然后依次遍历 instructions
中的每个指令,根据指令对 res
进行移动操作,最后返回 res
的坐标即为我们需要的结果。
具体实现代码如下:
def finalPosition(m: int, n: int, instructions: str) -> List[int]:
modulus = 1000000007
directions = ((0, 1), (1, 0), (0, -1), (-1, 0))
x, y = 0, 0
for instr in instructions:
if instr == 'U':
x = max(x - 1, 0)
elif instr == 'D':
x = min(x + 1, m - 1)
elif instr == 'L':
y = max(y - 1, 0)
elif instr == 'R':
y = min(y + 1, n - 1)
return [x, y]
我们定义了一个 directions
数组用来表示坐标移动的方向,其中第一个元素表示纵坐标的移动方向,第二个元素表示横坐标的移动方向。对于每个指令,我们根据指令判断需要左移还是右移,需要上移还是下移,并检查移动后的新坐标是否越界,如果越界了,则需要将该坐标调整回边界上。
本题不仅考察了对条件限制的判断,还考察了对坐标移动方向以及在移动过程中如何处理越界问题。通过这个简单的例子,我们可以更好地理解和掌握这些基础知识,为以后的编程工作打下坚实的基础。