需要注意的就是已经用过的点不能再用,所以要设置一个vis数组来存储是否用过。
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
if word == '':
return True
if board is None:
return False
r = len(board)
c = len(board[0])
l = len(word)
# 上:-1, 0
# 下:1, 0
# 左:0, -1
# 右:0, 1
dirs = [[-1, 0], [1, 0], [0, -1], [0, 1]]
vis = [[0 for i in range(c)] for j in range(r)]
def go(curr, curc, now):
if board[curr][curc] != word[now]:
return False
if now == l-1:
return True
flag = False
for dire in dirs:
tmpx = curr+dire[0]
tmpy = curc+dire[1]
if tmpx < 0 or tmpy < 0 or tmpx >= r or tmpy >= c or vis[tmpx][tmpy]:
continue
vis[tmpx][tmpy] = 1
flag = go(tmpx, tmpy, now+1)
vis[tmpx][tmpy] = 0
if flag:
break
return flag
flag = False
for curr in range(r):
for curc in range(c):
if board[curr][curc] == word[0]:
vis[curr][curc] = 1
flag = go(curr, curc, 0)
vis[curr][curc] = 0
if flag:
break
if flag:
break
return flag