LeetCode-python 79.单词搜索

题目链接
难度:中等       类型: 数组、字符串、深度优先搜索


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

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

示例

board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

解题思路


深度优先搜索
注意:搜索过的地方需要有标记,以免重复搜索

代码实现

class Solution(object):
    def exist(self, board, word):
        """
        :type board: List[List[str]]
        :type word: str
        :rtype: bool
        """
        n, m = len(board), len(board[0])
        
        def dfs(board, x, y, word):
            if not word:
                return True
            if 0<=x<n and 0<=y<m and board[x][y] == word[0] and board[x][y]!='#':
                
                t, board[x][y] = board[x][y], '#'    
                res =  dfs(board, x, y+1, word[1:]) or dfs(board, x, y-1, word[1:]) or dfs(board, x+1, y, word[1:]) or dfs(board, x-1, y, word[1:])
                board[x][y] = t
                return res
                         
            return False
        for i in range(n):
            for j in range(m):
                if dfs(board,i,j,word):
                    return True
        return False

本文链接://www.greatytc.com/p/a3467aaf5633

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,522评论 0 5
  • 简述 极客时间算法40讲中所出现的leetcode算法题 题目 【链表】reverse-linked-list(反...
    BestbpF阅读 4,523评论 0 4
  • 初步体会使用一个数组来表示方向位移的技巧,体会使用递归在二维平面上搜索匹配的过程,有点暴力搜索的意思,只不过这个暴...
    李威威阅读 582评论 0 0
  • “说到学习,很多人会觉得这是一项复杂的工程。如果把学习的过程进行拆解,可以将其分为输入、处理和输出三个环节。输入的...
    瑜头阅读 282评论 0 0
  • 关于我爱你 无关天地 只是爱你 太阳45度的照着 恰到好处 我又想你了 野草在努力活着 而我却在想方设法的死去 只...
    灿7阅读 440评论 2 4