文章目录
1. 题目2. 解题思路3. 代码实现3.1 DFS
4. 总结5. 参考文献
1. 题目
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3x4的矩阵中包含一条字符串"bfce"的路径(路径中的字母用下划线标出)。但矩阵中不包含字符串"abfb"的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。
2. 解题思路
详情见 leetcode 面试题12. 矩阵中的路径(深度优先搜索 DFS ,清晰图解)
3. 代码实现
3.1 DFS
class Solution:
def exist(self
, board
: List
[List
[str]], word
: str) -> bool:
def dfs(i
, j
, k
):
if not 0 <= i
< len(board
) or not 0 <= j
< len(board
[0]) or board
[i
][j
] != word
[k
]: return False
if k
== len(word
) - 1: return True
tmp
, board
[i
][j
] = board
[i
][j
], '/'
res
= dfs
(i
+ 1, j
, k
+ 1) or dfs
(i
- 1, j
, k
+ 1) or dfs
(i
, j
+ 1, k
+ 1) or dfs
(i
, j
- 1, k
+ 1)
board
[i
][j
] = tmp
return res
for i
in range(len(board
)):
for j
in range(len(board
[0])):
if dfs
(i
, j
, 0): return True
return False
4. 总结
so hard
5. 参考文献
[1] 剑指offer丛书 [2] 剑指Offer——名企面试官精讲典型编程题