zoukankan      html  css  js  c++  java
  • LeetCode 542. 01 矩阵

    我的LeetCode:https://leetcode-cn.com/u/ituring/

    我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii

    LeetCode 542. 01 矩阵

    题目

    给定一个由 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。
    • 矩阵中的元素只在四个方向上相邻: 上、下、左、右。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/01-matrix
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路

    本题比较直接想到的是BFS和DFS,另外还有dp不容易想到;
    图解:

    思路1-BFS

    • 把所有的0位置当作同源起始搜索位置往内层bfs;

    算法复杂度:(N为数组的元素总数)

    • 时间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $

    思路2-DFS

    • 把最外层的1当作DFS的同源起始位置,可以减少递归栈的深度,因为BFS时外层的0只会做一次判断,但是DFS时,外层的0会互相进入递归,而这样的递归是无意义的;

    算法复杂度:(N为数组的元素总数)

    • 时间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $

    思路3-dp动态规划,从左上角到右下角往复扫描一次

    • 第一次扫描遇到非0位置先给最大路径,然后再左上收敛;
    • 第二次扫描从右下再收敛一遍;

    算法复杂度:(N为数组的元素总数)

    • 时间复杂度: $ {color{Magenta}{Omicronleft(N ight)}} $
    • 空间复杂度: $ {color{Magenta}{Omicronleft(1 ight)}} $

    算法源码示例

  • 相关阅读:
    【SICP练习】129 练习3.60
    【SICP练习】128 练习3.59
    【SICP练习】127 练习3.58
    【SICP练习】126 练习3.57
    【SICP练习】125 练习3.56
    【SICP练习】124 练习3.55
    【SICP练习】123 练习3.54
    【SICP练习】122 练习3.53
    【SICP练习】121 练习3.52
    【SICP练习】120 练习3.51
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12708457.html
Copyright © 2011-2022 走看看