01 矩阵

作者: _阿南_ | 来源:发表于2020-04-15 10:48 被阅读0次

    题目:

    给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
    
    两个相邻元素间的距离为 1 。
    
    示例 1:
    输入:
    
    0 0 0
    0 1 0
    0 0 0
    输出:
    
    0 0 0
    0 1 0
    0 0 0
    示例 2:
    输入:
    
    0 0 0
    0 1 0
    1 1 1
    输出:
    
    0 0 0
    0 1 0
    1 2 1
    注意:
    
    给定矩阵的元素个数不超过 10000。
    给定矩阵中至少有一个元素是 0。
    矩阵中的元素只在四个方向上相邻: 上、下、左、右。
    

    题目的理解:

    创建一个容量一样的一个矩阵来保存距离,0的位置为0,0附近的距离为1,1附近的距离为2,直到所有的位置都计算完成。

    python实现

    from typing import List
    class Solution:
        def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
            m = len(matrix)
            n = len(matrix[0])
            result = [[10000] * n for _ in range(m)]
            remain = list()
            
            for row in range(m):
                for column in range(n):
                    if matrix[row][column] == 0:
                        result[row][column] = 0
                    else:
                        remain.append((row, column))
            
            times = 0
            while len(remain) > 0:
                remainTemp = remain.copy()
                
                for row, column in remainTemp:
                    for rowTemp, columnTemp in [(row, column - 1), (row + 1, column), (row, column + 1), (row - 1, column)]:
                        if 0 <= rowTemp < m and 0 <= columnTemp < n:
                            if result[rowTemp][columnTemp] == times:
                                result[row][column] = times + 1
                                remain.remove((row, column))
                                break
                
                times += 1
            
            return result
    

    想看最优解法移步此处

    提交

    呵呵哒

    现在看到中等难度的题目,会心一笑,So easy!!! 要提高,真的是要被逼一把啊。

    相关文章

      网友评论

        本文标题:01 矩阵

        本文链接:https://www.haomeiwen.com/subject/xpbqvhtx.html