
1138 字母板上的路径(模拟)
字母板结构:字母板是一个 6x5 的网格,其中每个位置对应一个字符。我们可以通过计算字符的 ASCII 码来确定其在字母板中的位置。 移动规则:我们可以按以下规则移动: 路径规划:对于每个目标字符,计算从当前位置到目标位置的行差和列差,根据差值确定移动方向和次数。每次移动后,记录当前字符。 字典映射:首先创建一个字典 初始化位置:当前位置从 (0, 0) 开始。 遍历目标字符串:对于每个字符,计算其在字母板中的位置,并确定从当前位置到目标位置的行差和列差。 生成移动指令:根据行差和列差生成移动指令,向上、向下、向左或向右移动相应次数。 记录字符:在到达目标位置后,记录当前字符,并更新当前位置。
发布日期:2021-05-07 21:53:31
浏览次数:35
分类:精选文章
本文共 1464 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找到从坐标 (0, 0) 出发,按最短路径收集目标字符串中的字符。每一步可以向上、向下、向左或向右移动一格,或者在当前位置按 '!' 记录当前字符。
方法思路
- '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
,将每个字符映射到其在字母板中的坐标。这种方法确保了在最短路径内完成任务,每一步移动都是必要且最优的。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月17日 05时42分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Typora配置PicGo时,提示Failed to fetch
2019-03-06
ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL
2021-05-09
SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积
2021-05-09
python的map函数
2021-05-09
bcolz的新操作
2021-05-09
Linux的s、t、i、a权限(转)
2019-03-06
zmq的send
2019-03-06
C++中的delete加深认识
2019-03-06
windows消息机制(转)
2019-03-06
STL笔试面试题总结(干货)(转)
2019-03-06
XML 和 HTML 之间的差异
2019-03-06
qt中moc的作用
2019-03-06
阿里钉钉面试题
2019-03-06
华为社招笔试
2019-03-06
MFC的Dlg和App什么区别?应用程序类与对话框类
2019-03-06
C\C++下获取系统进程或线程ID(转)
2019-03-06
VS环境变量(转)
2019-03-06
C++中找资源或者函数的方法
2019-03-06