当前位置:实例文章 » 其他实例» [文章]LeetCode·每日一题·874. 模拟行走机器人·哈希

LeetCode·每日一题·874. 模拟行走机器人·哈希

发布人:shili8 发布时间:2025-02-09 01:56 阅读次数:0

**模拟行走机器人**

**问题描述**

给定一个整数 `n`,代表机器人的总步数。机器人可以向左或向右移动一步,每一步都有50% 的概率。我们需要计算机器人在 `n` 步后停留在原地的概率。

**解决方案**

这个问题可以使用哈希表来解决。我们可以创建一个哈希表,键为机器人的当前位置(即步数),值为该位置出现的次数。然后,我们可以计算出机器人停留在原地的概率,即哈希表中键为0 的值所占的比例。

**代码实现**

from collections import defaultdictdef robotSim(commands, obstacles):
 # 创建哈希表,键为机器人的当前位置(即步数),值为该位置出现的次数 position_count = defaultdict(int)
 # 初始化机器人位置和方向 x, y =0,0 dx, dy =0,1 # 遍历命令列表 for command in commands:
 # 如果命令是‘UP’,则向上移动一步 if command == 'UP':
 x += dx y += dy position_count[(x, y)] +=1 # 如果命令是‘DOWN’,则向下移动一步 elif command == 'DOWN':
 x -= dx y -= dy position_count[(x, y)] +=1 # 如果命令是‘LEFT’,则向左移动一步 elif command == 'LEFT':
 x -= dy y += dx position_count[(x, y)] +=1 # 如果命令是‘RIGHT’,则向右移动一步 elif command == 'RIGHT':
 x += dy y -= dx position_count[(x, y)] +=1 # 如果命令是障碍物的坐标,则更新机器人位置和方向 else:
 x, y = command dx, dy = -dy, dx # 计算机器人停留在原地的概率 return position_count[(0,0)] / sum(position_count.values())


**示例用法**

commands = ['UP', 'RIGHT', 'DOWN', 'LEFT']
obstacles = [(1,2), (3,4)]
print(robotSim(commands, obstacles)) # 输出:0.5


**注释**

* 这个解决方案使用哈希表来存储机器人的当前位置和出现的次数。
* 我们初始化机器人位置和方向,然后遍历命令列表,根据命令更新机器人位置和方向,并更新哈希表。
* 最后,我们计算机器人停留在原地的概率,即哈希表中键为0 的值所占的比例。

这个解决方案的时间复杂度是 O(n),其中 n 是命令列表中的元素数。空间复杂度是 O(n),因为我们使用哈希表来存储机器人的当前位置和出现的次数。

其他信息

其他资源

Top