给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]

给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

 class Solution:
# (x-1,y)
# (x,y-1) (x,y) (x,y+1)
# (x+1,y)
directions= [(0,-1),(-1,0),(0,1),(1,0)]
def exist(self, board: List[List[str]], word: str) -> bool:
m = len(board)
if m == 0:
return False
n = len(board[0]) marked = [[False for _ in range(n)] for _ in range(m)]
# 对每一个格子都从头开始搜索
for i in range(m):
for j in range(n):
if self.__search_word(board,word,0,i,j,marked,m,n):
return True
return False
def __search_word(self,board,word,index,start_x,start_y,marked,m,n):
# 先写递归终止条件
if index == len(word) -1:
return board[start_x][start_y] == word[index]
# 中间匹配了,再继续搜索
if board[start_x][start_y] == word[index]:
# 先占住这个位置,搜索不成功的话,要释放掉
marked[start_x][start_y] = True
for direction in self.directions:
new_x = start_x +direction[0]
new_y = start_y + direction[1]
## 注意:如果这一次 search word 成功的话,就返回
if 0 <= new_x < m and 0 <= new_y < n and not marked[new_x][new_y] and self.__search_word(board,word,index+1,new_x,new_y,marked,m,n):
return True
marked[start_x][start_y] = False
return False

最新文章

  1. 5 Hbase
  2. rsync使用
  3. CocoaPods:管理Objective-c 程序中各种第三方开源库关联
  4. ASP.NET Excel 导入 Oracle 方法2
  5. 了解javascript中的this --实例篇
  6. http请求数据
  7. java this 隐式参数
  8. ERROR ITMS-90167: &quot;No .app bundles found in the package&quot;
  9. VGA IP核的制作
  10. fix iis Running slow
  11. Android安卓安全审计mobiseclab
  12. STM32单片机在Keil5下仿真的问题解决及GPIO口初始化、使用
  13. Delphi中使用Dos窗口输出调试信息
  14. Java关于static的作用
  15. FPGA高速ADC接口实战——250MSPS采样率ADC9481
  16. Redmine(window7)安装
  17. mybatis-ehcache整合中出现的异常 ibatis处理器异常(executor.ExecutorException)解决方法
  18. Tips_方格拼图效果
  19. 关于tomcat服务器
  20. AngularJS实现三级Table列表

热门文章

  1. windows 10 取消alt+tab的预览功能
  2. JavaScript event对象clientX,offsetX,screenX异同
  3. vue axios应用
  4. JS案例经验二
  5. java基础笔记(6)
  6. P1313计算系数
  7. 区间gcd
  8. Y7000 安装ubuntu16.04.6 的tips :禁用nouveau 、Wifi 问题 、nvidia 驱动安装
  9. HNUSTOJ-1638 遍地桔子(贪心)
  10. C#多线程下更新UI的几种方法