【力扣100】【好题】79.单词搜索

添加链接描述

class Solution(object):
    
    # 定义上下左右四个行走方向
    directs = [(0, 1), (0, -1), (1, 0), (-1, 0)]
    
    def exist(self, board, word):
        """
        :type board: List[List[str]]
        :type word: str
        :rtype: bool
        """
        m = len(board)
        if m == 0:
            return False
        n = len(board[0])
        mark = [[0 for _ in range(n)] for _ in range(m)]
                
        for i in range(len(board)):
            for j in range(len(board[0])):
                if board[i][j] == word[0]:
                    # 将该元素标记为已使用
                    mark[i][j] = 1
                    if self.backtrack(i, j, mark, board, word[1:]) == True:
                        return True
                    else:
                        # 回溯
                        mark[i][j] = 0
        return False
        
        
    def backtrack(self, i, j, mark, board, word):
        if len(word) == 0:
            return True
        
        for direct in self.directs:
            cur_i = i + direct[0]
            cur_j = j + direct[1]
            
            if cur_i >= 0 and cur_i < len(board) and cur_j >= 0 and cur_j < len(board[0]) and board[cur_i][cur_j] == word[0]:
                # 如果是已经使用过的元素,忽略
                if mark[cur_i][cur_j] == 1:
                    continue
                # 将该元素标记为已使用
                mark[cur_i][cur_j] = 1
                if self.backtrack(cur_i, cur_j, mark, board, word[1:]) == True:
                    return True
                else:
                    # 回溯
                    mark[cur_i][cur_j] = 0
        return False

思路:

  1. 首先在board中找到target中的第一个字母
  2. 为什么要使用一个mark数组记录是否使用过?为了应对下面这个情况:
    在这里插入图片描述
  3. 为什么要回溯?也是上面这个情况,比如我一个s周围有4个e,第一个e用不了,那就回尝试第二个,第三个,第四个…所以需要回溯
  4. directs数组用来进行扫荡,而且所有循环都是在这个扫荡的基础上进行的
  5. 边界值条件,不能比0小,也不能超过最大值,并且需要字母匹配
  6. 很全面的一道题,值得反复做

相关推荐

  1. 79. 单词搜索

    2024-01-02 12:30:02       55 阅读
  2. 212单词搜索 II

    2024-01-02 12:30:02       25 阅读
  3. 【算法79. 单词搜索

    2024-01-02 12:30:02       44 阅读
  4. 100】【】155.最小栈

    2024-01-02 12:30:02       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-02 12:30:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-02 12:30:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-02 12:30:02       87 阅读
  4. Python语言-面向对象

    2024-01-02 12:30:02       96 阅读

热门阅读

  1. 小肥柴的Hadoop之旅

    2024-01-02 12:30:02       60 阅读
  2. 我的运维认知

    2024-01-02 12:30:02       61 阅读
  3. ASIC与FPGA哪个前景好?FPGA有必要转ASIC吗?

    2024-01-02 12:30:02       68 阅读
  4. Vue中的keep-alive缓存组件的理解

    2024-01-02 12:30:02       52 阅读
  5. 12.26

    12.26

    2024-01-02 12:30:02      64 阅读
  6. c++ day4

    2024-01-02 12:30:02       44 阅读
  7. 微信小程序canvas手写签字

    2024-01-02 12:30:02       52 阅读
  8. C:宏:编程风格:井号与define之间的空格

    2024-01-02 12:30:02       59 阅读
  9. 将jupyter转换为python文件

    2024-01-02 12:30:02       58 阅读