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),因为我们使用哈希表来存储机器人的当前位置和出现的次数。