zoukankan      html  css  js  c++  java
  • [LeetCode in Python] 542 (M) 01 matrix 01 矩阵

    题目

    https://leetcode-cn.com/problems/01-matrix/

    解题思路

    • 先将全部0的位置都放入队列,同时将其都加入seen_set
    • 标准BFS流程:
      • 首元素a出队,即为坐标
      • 探测a上下左右四个方向的元素
        • 如果坐标非法,或者曾经访问过,则跳过
        • 更新元素对应的距离值=a的距离+1
        • 更新seen_set
        • 将元素入队

    代码

    class Solution:
        def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
            n_row = len(matrix)
            n_col = len(matrix[0])
    
            # - init distance matrix
            dist = [[0]*n_col for _ in range(n_row)]
    
            # - save visited cell here
            seen_set = set()
    
            # - put all 0 cells in queue
            q = []
            for row in range(n_row):
                for col in range(n_col):
                    if matrix[row][col] == 0:
                        q.append((row,col))
                        seen_set.add((row,col))
            
            # - BFS
            while q:
                row,col = q.pop(0)
    
                # - 4 directions: left,right,top,bottom
                for dr,dc in [
                    (-1,0), (1,0), (0,-1), (0,1)
                ]:
                    # - next pos
                    nr, nc = row + dr, col + dc
    
                    # - check if pos is valid
                    if nr < 0: continue
                    if nr >= n_row: continue
                    if nc < 0: continue
                    if nc >= n_col: continue
                    if (nr,nc) in seen_set: continue
    
                    # - update dist
                    dist[nr][nc] = dist[row][col] + 1
    
                    seen_set.add((nr,nc))
                    q.append((nr,nc))
            
            return dist
    
  • 相关阅读:
    DOM
    Event
    响应式,多列布局
    理解HTML语义化
    类加载过程
    反射
    注解
    线程池
    管程法
    Lock锁
  • 原文地址:https://www.cnblogs.com/journeyonmyway/p/12702739.html
Copyright © 2011-2022 走看看