【hot100篇-python刷题记录】【腐烂的橘子】

R6-图论

思路:尽可能从中间开始吧,向四周扩散。

实际上就可以理解为BFS搜索。

 使用rot,fresh集合分别记录腐烂、新鲜的集合的元素下标

使用集合是为了更方便增减元素(直接使用-=即可,集合加减)

遍历,rot集合中的每一个元素,对其进行上下左右移动,判断是否存在

存在的话就fresh-rot集合得到最后的集合。

class Solution:
    def orangesRotting(self, grid: List[List[int]]) -> int:
        m=len(grid)
        n=len(grid[0])
        rot={(i,j) for i in range(m) for j in range(n) if grid[i][j]==2}
        fresh={(i,j) for i in range(m) for j in range(n) if grid[i][j]==1}
        time=0
        while fresh:
            if not rot:
                return -1
            rot={(i+di,j+dj) for i,j in rot for di,dj in [(0,1),(0,-1),(1,0),(-1,0)] if (i+di,j+dj) in fresh}
            fresh-=rot
            time+=1
        return time

ps:

上下左右移动

# 设初始点为 (i, j)
for di, dj in [(0, 1), (0, -1), (1, 0), (-1, 0)]: # 上、下、左、右
    i + di, j + dj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值