leetcode每日一题 python解法 4月15日

难度:中等

题目内容:

给定一个由 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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容