LeetCode 542

这道题目不难,主要用到的思想是BFS。重要的是理清思路。
a.首先从0开始,搜索周围的未被check过的1,把这些1全部赋值为1,并设置状态为checked,把这些1进行保存。
b.从上面保存的1开始搜索周围的未被check过的1,把这些1全部赋值为2,并设置状态为checked,把这些2进行保存。
c.从上面保存的2开始搜索周围的未被check过的1,把这些1全部赋值为3,并设置状态为checked,把这些3进行保存。
....
d.直到保存的点是empty,程序退出。
​​​​​​​class Solution(object):
    def updateMatrix(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: List[List[int]]
        """
        start_points = []
        row = len(matrix)
        col = len(matrix[0])
        if_check = [[False] * col for i in range(row)]

        for i in range(row):
            for j in range(col):
                if matrix[i][j] == 0:
                    start_points.append((i, j))
                    if_check[i][j] = True


        depth = 1
        while len(start_points) != 0:
            new_start_points = []
            for start_point in start_points:
                row_idx, col_idx = start_point
                if row_idx >= 1 and if_check[row_idx-1][col_idx] == 0:
                    matrix[row_idx-1][col_idx] = depth
                    if_check[row_idx-1][col_idx] = True
                    new_start_points.append((row_idx-1, col_idx))
                if col_idx >= 1 and if_check[row_idx][col_idx-1] == 0:
                    matrix[row_idx][col_idx-1] = depth
                    if_check[row_idx][col_idx-1] = True
                    new_start_points.append((row_idx, col_idx-1))
                if col_idx < col-1 and if_check[row_idx][col_idx+1] == 0:
                    matrix[row_idx][col_idx+1] = depth
                    if_check[row_idx][col_idx+1] = True
                    new_start_points.append((row_idx, col_idx+1))
                if row_idx < row-1 and if_check[row_idx+1][col_idx] == 0:
                    matrix[row_idx+1][col_idx] = depth
                    if_check[row_idx+1][col_idx] = True
                    new_start_points.append((row_idx+1, col_idx))
            depth += 1
            start_points = new_start_points
        return matrix


if __name__ == "__main__":
    S = Solution()
    matrix = []
    matrix.append([0, 0, 0])
    matrix.append([0, 1, 0])
    #matrix.append([0, 0, 0])
    matrix.append([1, 1, 1])

    S.updateMatrix(matrix)

    print(matrix)

 

发布了329 篇原创文章 · 获赞 98 · 访问量 61万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览