解决方案


方法一:回溯法

思路与算法

让我们尝试遍历每一个 0 方格,并在走过的方格里留下一个障碍。回溯的时候,我们要删除那些自己留下的障碍。

介于输入数据的限制,这个方法是可以通过的,因为一个不好的路径很快就会因没有无障碍的方格可以走而被卡住。

复杂度分析

  • 时间复杂度:,其中 是这个二维网格行与列的大小。(我们可以找到一个更加精确的界限,但是这个界限已经超越了本文的范围)

  • 空间复杂度:


方法二:动态规划

思路与算法

让我们定义 dp(r, c, todo) 为从 (r, c) 开始行走,还没有遍历的无障碍方格集合为 todo 的好路径的数量。

我们可以使用一个与 方法一 类似的方法,并通过记忆化状态 (r, c, todo) 的答案来避免重复搜索。

复杂度分析

  • 时间复杂度:,其中 是给定二维网格行与列的大小。
  • 空间复杂度: