题目:
给定一个由 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!!! 要提高,真的是要被逼一把啊。
网友评论