LeetCode 542. 01 矩阵

雨燕双飞 提交于 2020-04-16 09:31:09

【推荐阅读】微服务还能火多久?>>>

我的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}{\Omicron\left(N\right)}} $
  • 空间复杂度: $ {\color{Magenta}{\Omicron\left(N\right)}} $

思路2-DFS

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

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

  • 时间复杂度: $ {\color{Magenta}{\Omicron\left(N\right)}} $
  • 空间复杂度: $ {\color{Magenta}{\Omicron\left(N\right)}} $

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

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

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

  • 时间复杂度: $ {\color{Magenta}{\Omicron\left(N\right)}} $
  • 空间复杂度: $ {\color{Magenta}{\Omicron\left(1\right)}} $

算法源码示例

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!