zoukankan      html  css  js  c++  java
  • LeetCode 79. 单词搜索

    79. 单词搜索

    Difficulty: 中等

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

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

    示例:

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

    提示:

    • boardword 中只包含大写和小写英文字母。
    • 1 <= board.length <= 200
    • 1 <= board[i].length <= 200
    • 1 <= word.length <= 10^3

    Solution

    这是一道考察深度优先搜索的题目,搜索的深度为单词的长度,遍历矩阵中的每一个元素,对该元素的上下左右四个方向进行搜索,搜索终止的条件是:

    1. 下一个搜索的方向超过了不在矩阵的范围之内
    2. 遍历的元素不等于第d个字符
    3. 搜索到的字符是单词的最后一个元素

    题目中要求同一个单元格内的字母不允许被重复使用,所以在进行下一步深度搜索之前需要修改矩阵中当前的元素,搜索完成之后再改为原样,这样就确保了下一次搜索中同一个单元格的字母不会被重复使用。

    class Solution:
        def exist(self, board: List[List[str]], word: str) -> bool:
            if len(board) == 0:
                return False
            h, w = len(board), len(board[0])
            for i in range(h):
                for j in range(w):
                    if self.search(board, word, i, j, 0):
                        return True
            return False
            
        def search(self, board, word, x, y, d):
            h, w = len(board), len(board[0])
            if x < 0 or y < 0 or x == h or y == w or board[x][y] != word[d]:
                return False
            
            if d == (len(word) - 1):
                return True
            
            cur = board[x][y]
            board[x][y] = ''
            flag = self.search(board, word, x-1, y, d+1) or self.search(board, word, x, y-1, d+1) or self.search(board, word, x+1, y, d+1) or self.search(board, word, x, y+1, d+1)
            board[x][y] = cur
            return flag
    
  • 相关阅读:
    STM32-使用软件模拟I2C读写外部EEPROM(AT24C02)
    STM32-软件模拟I2C
    STM32_使用DAC输出三角波
    VS常用快捷键
    C语言volatile关键字在单片机中的作用
    如何使用数据库引擎优化顾问优化数据库(转)
    SQLServer数据库慢查询追踪
    怎么获取基金净值数据?(科普)
    解决了一个ssh登录缓慢的问题
    oracle存储过程转达梦8存储过程时踩过的坑2(完结篇)
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14582173.html
Copyright © 2011-2022 走看看