• 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)}} $

    算法源码示例

  • 相关阅读:
    vue-cli3安装使用
    document.readyState
    js的堆与栈
    常用方法
    js常见排序算法
    微信小程序swiper高度问题
    微信小程序滑动菜单
    数据筛选和排序------的解析
    使用Windows实现数据绑定----------的解析
    实现Windoes程序的数据更新------的详细解析
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12708457.html
Copyright © 2020-2023  润新知