📌  相关文章
📜  矩阵中的最终单元格位置(1)

📅  最后修改于: 2023-12-03 15:41:01.766000             🧑  作者: Mango

题目介绍:矩阵中的最终单元格位置

题目描述

给定一个初始位置 (0, 0),一个大小为 m x n 的矩阵 matrix 和一个表示一系列指令的字符串 instructions,其中每个指令表示移动方向:

  • "U" - 向上移动一格
  • "D" - 向下移动一格
  • "L" - 向左移动一格
  • "R" - 向右移动一格

移动后,如果位置越界了(超出了矩阵的边界),则该指令将被忽略。

请你执行所有指令,然后返回你在最终到达的位置。答案坐标模 109 + 7 后返回。

示例
示例 1

输入:

m = 3, n = 6
ops = "URR"

输出:

[2, 5]
示例 2

输入:

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 数组用来表示坐标移动的方向,其中第一个元素表示纵坐标的移动方向,第二个元素表示横坐标的移动方向。对于每个指令,我们根据指令判断需要左移还是右移,需要上移还是下移,并检查移动后的新坐标是否越界,如果越界了,则需要将该坐标调整回边界上。

总结

本题不仅考察了对条件限制的判断,还考察了对坐标移动方向以及在移动过程中如何处理越界问题。通过这个简单的例子,我们可以更好地理解和掌握这些基础知识,为以后的编程工作打下坚实的基础。