Leetcode 3286. Find a Safe Walk Through a Grid

部署运行你感兴趣的模型镜像

1. 解题思路

这一题的话思路上就是一个宽度优先遍历,我们按照health进行排序进行宽度优先遍历,看看在health被消耗完之前是否可能走到终点即可。

2. 代码实现

给出python代码实现如下:

class Solution:
    def findSafeWalk(self, grid: List[List[int]], health: int) -> bool:
        n, m = len(grid), len(grid[0])
        if health - grid[0][0] < 1:
            return False
        q = [(-health+grid[0][0], 0, 0)]
        seen = set()
        while q:
            h, x, y = heapq.heappop(q)
            if (x, y) in seen:
                continue
            seen.add((x, y))
            h = -h
            for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
                nx, ny = x+dx, y+dy
                if 0 <= nx < n and 0 <= ny < m and (nx, ny) not in seen and h - grid[nx][ny] > 0:
                    if nx == n-1 and ny == m-1:
                        return True
                    heapq.heappush(q, (-(h-grid[nx][ny]), nx, ny))
        return False

提交代码评测得到:耗时238ms,占用内存17.3MB。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值