zoukankan      html  css  js  c++  java
  • 542. 01 Matrix(Two pass,动态规划)

    Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell.
    The distance between two adjacent cells is 1.

    Example 1:
    Input:

    0 0 0
    0 1 0
    0 0 0
    

    Output:

    0 0 0
    0 1 0
    0 0 0
    

    Example 2:
    Input:

    0 0 0
    0 1 0
    1 1 1
    

    Output:

    0 0 0
    0 1 0
    1 2 1
    

    Note:

    1. The number of elements of the given matrix will not exceed 10,000.
    2. There are at least one 0 in the given matrix.
    3. The cells are adjacent in only four directions: up, down, left and right.
    class Solution:
        def updateMatrix(self, matrix):
            """
            :type matrix: List[List[int]]
            :rtype: List[List[int]]
            """
            m,n = len(matrix),len(matrix[0])
            res = [[1000000 for i in range(n)] for j in range(m)]
            for i in range(m):  #First pass: check for left and top
                for j in range(n):
                    if matrix[i][j]==0:
                        res[i][j] = 0
                    else:
                        if i>0:
                            res[i][j] = min(res[i][j],res[i-1][j]+1)
                        if j>0:
                            res[i][j] = min(res[i][j],res[i][j-1]+1)
            for i in range(m-1,-1,-1): #Second pass: check for bottom and right
                for j in range(n-1,-1,-1):
                    if i<m-1:
                        res[i][j] = min(res[i][j],res[i+1][j]+1)
                    if j<n-1:
                        res[i][j] = min(res[i][j],res[i][j+1]+1)
            return res
    
  • 相关阅读:
    udp和tcp
    以查询代替临时变量
    memcached内存管理
    设计模式适配器模式
    排序算法
    防止表单重复提交
    php的引用
    按位与,按位异或,按位取反
    git常用操作
    http
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/10050664.html
Copyright © 2011-2022 走看看