难度:中等
题目内容:
给定一个由 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的距离
然后在主函数调用这个函数出个矩阵就好
class Solution:
def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:
r = [[matrix[row][col] for col in range(len(matrix[0]))] for row in range(len(matrix))]
for i in range(len(r)):
for j in range(len(r[i])):
r[i][j] = self.calDistance(matrix,i,j)
return r
def calDistance(self,matrix,i,j):
height = len(matrix)
width = len(matrix[0])
d = height + width + 1
for a in range(1,max(width,height)+1):
x = i-a
y = j
for k in range(0,a+1):
if matrix[x+k][y-k] == 0:
return abs(x+k - i) + abs(y-k - j)
x = i+a
y = j
for k in range(0,a+1):
if matrix[x-k][y+k] == 0:
return abs(x+k - i) + abs(y-k - j)
x = i-a
y = j
for k in range(0,a+1):
if matrix[x+k][y+k] == 0:
return abs(x+k - i) + abs(y-k - j)
x = i+a
y = j
for k in range(0,a+1):
if matrix[x-k][y-k] == 0:
return abs(x+k - i) + abs(y-k - j)