算法提高之LeetCode刷题数据结构和算法分析

01 矩阵

2020-04-15  本文已影响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!!! 要提高,真的是要被逼一把啊。

上一篇下一篇

猜你喜欢

热点阅读