LeetCode789 逃脱阻碍者(贪心 | Manhattan距离)

该博客介绍了一个LeetCode问题,玩家从(0,0)出发,目标是达到target位置,同时避开从ghosts[]出发的幽灵。玩家能够逃脱的条件是到达目标的步数少于最接近的幽灵。解决方案是计算玩家和目标以及每个幽灵的曼哈顿距离,如果所有幽灵的距离都大于玩家到目标的距离,则玩家可以逃脱。代码中定义了一个名为mdist的函数来计算两点之间的曼哈顿距离,并在主函数中遍历幽灵进行比较。
摘要由CSDN通过智能技术生成
  • 题目:

https://leetcode-cn.com/problems/escape-the-ghosts/

一个玩家从 (0,0) 起步,另外若干个 ghosts 从 ghosts[] 起步

每个回合都可向上下左右任意方向走1步

输出:玩家能否躲避 ghost 到达 target

  • 题解:

玩家能否躲避 ghost 到达 target

——等价于玩家到 target 步数比任意 ghost 到 target 步数要少

步数

——上下左右任意方向走1步,总步数就是Manhattan距离

  • 代码:
class Solution:
    def escapeGhosts(self, ghosts: list[list[int]], target: list[int]) -> bool:
        def mdist(p, q):
            return abs(p[0] - q[0]) + abs(p[1] - q[1])
        t = mdist([0, 0], target)
        for g in ghosts:
            if mdist(g, target) <= t: return False
        return True


if __name__ == "__main__":
    print(Solution().escapeGhosts(ghosts = [[1,0],[0,3]], target = [0,1]))
    print(Solution().escapeGhosts(ghosts = [[1,0]], target = [2,0]))
    print(Solution().escapeGhosts(ghosts = [[2,0]], target = [1,0]))
    print(Solution().escapeGhosts(ghosts = [[5,0],[-10,-2],[0,-5],[-2,-2],[-7,1]], target = [7,7]))
    print(Solution().escapeGhosts(ghosts = [[-1,0],[0,1],[-1,0],[0,1],[-1,0]], target = [0,0]))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值