博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode--079--单词搜索(python)
阅读量:5072 次
发布时间:2019-06-12

本文共 1715 字,大约阅读时间需要 5 分钟。

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

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

示例:

board =

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

给定 word = "ABCCED", 返回 true.

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

 

1 class Solution: 2     #         (x-1,y) 3     # (x,y-1) (x,y) (x,y+1) 4     #         (x+1,y) 5     directions= [(0,-1),(-1,0),(0,1),(1,0)] 6     def exist(self, board: List[List[str]], word: str) -> bool: 7         m = len(board) 8         if m == 0: 9             return False10         n = len(board[0])11         12         marked = [[False for _ in range(n)] for _ in range(m)]13         # 对每一个格子都从头开始搜索14         for i in range(m):15             for j in range(n):16                 if self.__search_word(board,word,0,i,j,marked,m,n):17                     return True18         return False19     def  __search_word(self,board,word,index,start_x,start_y,marked,m,n):20         # 先写递归终止条件21         if index == len(word) -1:22             return board[start_x][start_y] == word[index]23         # 中间匹配了,再继续搜索24         if board[start_x][start_y] == word[index]:25             # 先占住这个位置,搜索不成功的话,要释放掉26             marked[start_x][start_y] = True27             for direction in self.directions:28                 new_x = start_x +direction[0]29                 new_y = start_y + direction[1]30                 ## 注意:如果这一次 search word 成功的话,就返回31                 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):32                     return True33             marked[start_x][start_y] = False34         return False

 

转载于:https://www.cnblogs.com/NPC-assange/p/11462898.html

你可能感兴趣的文章
EOS生产区块:解析插件producer_plugin
查看>>
lintcode-easy-Remove Element
查看>>
mysql重置密码
查看>>
jQuery轮 播的封装
查看>>
一天一道算法题--5.30---递归
查看>>
Java基础03 构造器与方法重载
查看>>
这些老外的开源技术养活了很多国产软件
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
python numpy sum函数用法
查看>>
php变量什么情况下加大括号{}
查看>>
less入门
查看>>
linux程序设计---序
查看>>
【字符串入门专题1】hdu3613 【一个悲伤的exkmp】
查看>>
C# Linq获取两个List或数组的差集交集
查看>>
21.Longest Palindromic Substring(最长回文子串)
查看>>
HDU 4635 Strongly connected
查看>>
ASP.NET/C#获取文章中图片的地址
查看>>
Spring MVC 入门(二)
查看>>
Java处理多人同时读写文件的文件锁处理
查看>>