R2-回溯:DFS+剪枝.
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
#回溯经典问题:DFS+剪枝解决
m=len(board)
n=len(board[0])
def dfs(i,j,k):
#3种剪枝策略
if not 0<=i<m or not 0<=j<n or board[i][j]!=word[k]:
return False
if k==len(word)-1:
return True
board[i][j]=''
#4条路,其中有一条是往回走的
ret=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]=word[k]
return ret
#每一个格子都能出发
for i in range(m):
for j in range(n):
if dfs(i,j,0):
return True
return False
ps: