题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems
特别鸣谢:来自夸夸群的 醉笑陪公看落花@知乎,王不懂不懂@知乎,QFIUNE@csdn
感谢醉笑陪公看落花@知乎 倾囊相授,感谢小伙伴们督促学习,一起进步
你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发,你的目的地是 target = [xtarget, ytarget] 。地图上有一些阻碍者,以数组 ghosts 给出,第 i 个阻碍者从 ghosts[i] = [xi, yi] 出发。所有输入均为 整数坐标 。
每一回合,你和阻碍者们可以同时向东,西,南,北四个方向移动,每次可以移动到距离原位置 1 个单位 的新位置。当然,也可以选择 不动 。所有动作 同时 发生。
如果你可以在任何阻碍者抓住你 之前 到达目的地(阻碍者可以采取任意行动方式),则被视为逃脱成功。如果你和阻碍者同时到达了一个位置(包括目的地)都不算是逃脱成功。
只有在你有可能成功逃脱时,输出 true ;否则,输出 false 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/escape-the-ghosts
题目分析
只要比所有的ghost先到达终点,也就是只要曼哈顿距离比所有gost小,才能确保不会被抓
题解
class Solution:
def escapeGhosts(self, ghosts: List[List[int]], target: List[int]) -> bool:
d = target[0]+target[1]
for g in ghosts:
if abs(g[0]-target[0])+abs(g[1]-target[1])<=d:
return False
return True
小知识点 曼哈顿距离 - 欧式距离 - 明可夫斯基距离
明氏距离又叫做明可夫斯基距离(Minkowski Distance),是欧氏空间中的一种测度,被看做是欧氏距离和曼哈顿距离的一种推广。用来计算两个样本间的距离