Python刷leetcode--剑指 Offer 12.矩阵中的路径
·
- python for遍历怎么带下标。enumerate 内置函数
- 递归的大体思路。找到一个然后,深入。不能进入格子两次 这种条件可以通过在当前层改变当前值的方式来避免重入
- 递归的出口。如果四个有任何一个满足就深入,深入 [深入的结果是一个bool值],如果长度相等返回true,因为上一层递归 l+1 了,,这个有点难理解。l表示走过的长度生成的字符串是不是已经相等了
- 回溯法,本层做完操作了 要还原,不能影响其他层
from typing import List
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
# leetcode submit region end(Prohibit modification and deletion)
for i, vi in enumerate(board):
for j, vj in enumerate(vi):
if vj == word[0]:
if self._dfs(board, word, i, j, 0):
return True
return False
# 怎么判断不能走过走过的路,把他赋空
def _dfs(self, board, word, i, j, l):
if l == len(word):
return True
if i < 0 or j < 0 or i == len(board) or j == len(board[0]):
return False
if board[i][j] == word[l]:
tmp = board[i][j]
board[i][j] = ''
if self._dfs(
board, word, i + 1, j, l + 1) or self._dfs(
board, word, i - 1, j, l + 1) or self._dfs(
board, word, i, j + 1, l + 1) or self._dfs(
board, word, i, j - 1, l + 1):
return True
else:
board[i][j] = tmp
更多推荐
所有评论(0)