题目来源:

  https://leetcode.com/problems/word-search/


 

题意分析:

  给定一个子表板和一个一个词,返回这个词是否在子表版上。子表板之间只能水平和垂直相连,子表板中的字符只能访问一次。


 

题目思路:

  这是一个典型的深度优先搜索。首先找到第一个字符,从这个字符开始进行深度优先搜索,搜索的时候要记得把已经搜索的记录为true。


 

代码(Python):

  

 1 class Solution(object):
 2     def exist(self, board, word):
 3         """
 4         :type board: List[List[str]]
 5         :type word: str
 6         :rtype: bool
 7         """
 8         l = len(word)
 9         if l == 0:
10             return False
11         m = len(board)
12         if m == 0: return False
13         n = len(board[0])
14         visit = [[False for i in range(n)] for j in range(m)]
15         def dfs(x,y,word):
16             if len(word) == 0: return True
17             if x > 0 and not visit[x-1][y] and board[x - 1][y] == word[0]:
18                 visit[x - 1][y] = True
19                 if dfs(x - 1,y,word[1:]):
20                     return True
21                 visit[x - 1][y] = False
22             if y > 0 and not visit[x][y-1] and board[x][y-1] == word[0]:
23                 visit[x][y-1] = True
24                 if dfs(x,y-1,word[1:]):
25                     return True
26                 visit[x][y-1] = False
27             if x + 1< m and not visit[x+1][y] and board[x+1][y] == word[0]:
28                 visit[x+1][y] = True
29                 if dfs(x+1,y,word[1:]):
30                     return True
31                 visit[x+1][y] = False
32             if y + 1 < n and not visit[x][y + 1] and board[x][y + 1] == word[0]:
33                 visit[x][y + 1] = True
34                 if dfs(x,y + 1,word[1:]):
35                     return True
36                 visit[x][y + 1] = False
37             return False
38         for i in range(m):
39             for j in range(n):
40                 if board[i][j] == word[0]:
41                     visit[i][j] = True
42                     if dfs(i,j,word[1:]):
43                         return True
44                     visit[i][j] = False
45         return False
46             
View Code

相关文章:

  • 2022-01-24
  • 2021-12-08
  • 2021-07-18
  • 2022-02-08
  • 2021-10-10
  • 2021-07-10
猜你喜欢
  • 2021-05-19
  • 2022-12-23
  • 2021-07-16
  • 2022-12-23
  • 2021-04-17
  • 2021-08-30
  • 2022-03-07
相关资源
相似解决方案