给定一个由 0 和 1 组成的二维矩阵,求每个位置到最近的 0 的距离。
输入
输入是一个二维 0-1 数组
输出
输出是一个同样大小的非负整数数组,表示每个位置到最近的 0的距离。
样例
标准输入 复制文本 |
[[0,0,0], [0,1,0], [1,1,1]] |
标准输出 复制文本 |
[[0,0,0], [0,1,0], [1,2,1]] |
提示
一般来说,因为这道题涉及到四个方向上的最近搜索,所以很多人的第一反应可能会是广度优先搜索。但是对于一个大小 O(mn) 的二维数组,对每个位置进行四向搜索,最坏情况的时间复杂度(即全是 1)会达到恐怖的O(m2n2)。一种办法是使用一个 dp 数组做 memoization,使得广度优先搜索不会重复遍历相同位置;另一种更简单的方法是,我们从左上到右下行一次动态搜索,再从右下到左上进行一次动态搜索。两次动态搜索即可完成四个方向上的查找。