1138 字母板上的路径(模拟)
发布日期:2021-05-07 21:53:31 浏览次数:35 分类:精选文章

本文共 1464 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要找到从坐标 (0, 0) 出发,按最短路径收集目标字符串中的字符。每一步可以向上、向下、向左或向右移动一格,或者在当前位置按 '!' 记录当前字符。

方法思路

  • 字母板结构:字母板是一个 6x5 的网格,其中每个位置对应一个字符。我们可以通过计算字符的 ASCII 码来确定其在字母板中的位置。
  • 移动规则:我们可以按以下规则移动:
    • 'U' 表示向上移动一行。
    • 'D' 表示向下移动一行。
    • 'L' 表示向左移动一列。
    • 'R' 表示向右移动一列。
  • 路径规划:对于每个目标字符,计算从当前位置到目标位置的行差和列差,根据差值确定移动方向和次数。每次移动后,记录当前字符。
  • 解决代码

    class Solution:    def alphabetBoardPath(self, target: str) -> str:        # 创建字典映射字符到位置        position_map = {}        for i in range(26):            c = chr(i + 97)            row = i // 5            col = i % 5            position_map[c] = (row, col)                current_x, current_y = 0, 0        result = []                for char in target:            target_pos = position_map[char]            dx = target_pos[0] - current_x            dy = target_pos[1] - current_y                        # 处理行移动            if dx > 0:                result.append('D' * dx)            elif dx < 0:                result.append('U' * (-dx))                        # 处理列移动            if dy > 0:                result.append('R' * dy)            elif dy < 0:                result.append('L' * (-dy))                        # 记录当前字符            result.append('!')            current_x, current_y = target_pos                return ''.join(result)

    代码解释

  • 字典映射:首先创建一个字典 position_map,将每个字符映射到其在字母板中的坐标。
  • 初始化位置:当前位置从 (0, 0) 开始。
  • 遍历目标字符串:对于每个字符,计算其在字母板中的位置,并确定从当前位置到目标位置的行差和列差。
  • 生成移动指令:根据行差和列差生成移动指令,向上、向下、向左或向右移动相应次数。
  • 记录字符:在到达目标位置后,记录当前字符,并更新当前位置。
  • 这种方法确保了在最短路径内完成任务,每一步移动都是必要且最优的。

    上一篇:python字典的常见操作
    下一篇:1137 第 N 个泰波那契数(迭代、记忆性递归)

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年04月17日 05时42分56秒