Problem
On a 2-dimensional grid
, there are 4 types of squares:
1
represents the starting square. There is exactly one starting square.2
represents the ending square. There is exactly one ending square.0
represents empty squares we can walk over.-1
represents obstacles that we cannot walk over.
Return the number of 4-directional walks from the starting square to the ending square, that walk over every non-obstacle square exactly once.
Example 1:
1 | Input: [[1,0,0,0],[0,0,0,0],[0,0,2,-1]] |
Example 2:
1 | Input: [[1,0,0,0],[0,0,0,0],[0,0,0,2]] |
Example 3:
1 | Input: [[0,1],[2,0]] |
Note:
1 <= grid.length * grid[0].length <= 20
Analysis
这道题是非常经典的地图回溯题目。这类题目主要就是在方格中往四个方向行走,求一些路径的长度或者路径的数量。那么对付这类题目很好的方法就是回溯,回溯的意思就是在某个位置的时候,利用递归向各个方向都走,走完之后又回退到当前的位置。
结合这道题目分析,题目要求的是计算出走完所有空格的路径的数量。走完所有空格这个是比较好判断的,只需要记录下走过的空格数量,如果和给出的空格数量一致,那么就是走完了。终止条件已经知道了,接下来就来看怎么走。
首先可以往四个方向走,这个不难,走完某个空格之后,需要先标志为-1(不可走),然后往四个方向都试完之后,再重新标记回原来的值。
Solution
递归的时候带上parent的坐标还有空格数量的统计信息即可。
Code
1 | class Solution { |
Summary
这道题目被标记为hard,虽然代码量比较多,但是如果是熟悉回溯的朋友应该能够快速解决。这道题的分析到这里,谢谢!