Leetcode 2061. Number of Spaces Cleaning Robot Cleaned [Python]

题目本来没那么难的,其实就是每个格子走过了,就不能再计数了(res不加1),但是每个格子可以反复走,只不过!!!方向不能与之前某次走过这个格子的方向一样,这样就重复了。每当当前的格子往下一步(沿着当前方向)走,可以找到新的、合法的下一步时,就挪到下一步的格子里,res+1,并带着方向,位置,记录到que和路径记录中,clean也要记录新的位置。否则 ,改变方向,此时,位置还没改变,只能找当前位置与新的方向组成的三元组是否在之前路径中出现过,没有,则可以记录到que和路径记录中,是,则说明重复了,这样就意味着可以返回求结果了。

class Solution:
    def numberOfCleanRooms(self, room: List[List[int]]) -> int:
        dit = [(0,1),(1,0),(0,-1),(-1,0)]
        row = len(room)
        col = len(room[0])
        
        que = collections.deque()
        gosequen = set()
        clean = set()
        
        que.append((0,0,0))
        gosequen.add((0,0,0))
        clean.add((0,0))
        
        while que:
            curx,cury,dit_index = que.popleft()
            
            dx,dy = dit[dit_index]
            newx = curx + dx
            newy = cury + dy
            
            if (0 <= newx < row and 0 <= newy < col and room[newx][newy] == 0):
                que.append((newx, newy, dit_index))
                gosequen.add((newx, newy, dit_index))
                clean.add((newx, newy))
               
            else:
                dit_index += 1
                dit_index %= 4
                
                if (curx,cury,dit_index) not in gosequen:
                    gosequen.add((curx,cury,dit_index))
                    que.append((curx,cury,dit_index))
        return len(clean)
            
        
                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值