当前位置: 首页 > article >正文

leetcode hot 100 单词搜索

79. 单词搜索

已解答

中等

相关标签

相关企业

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

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

import copy

class Solution(object):

    def exist(self, board, word):

        """

        :type board: List[List[str]]

        :type word: str

        :rtype: bool

        """

        # o(mnkk)的就是遍历一遍找到开头,对所有开头左dfs

        m = len(board)

        n = len(board[0])

        visted = copy.deepcopy(board)

        self.ret = False


 

        def dfs(x,y,count):

            if count==len(word)-1 :

                self.ret = True

                return

            tmp = False

            count+=1

            if x>=0 and x<m-1 and y>=0 and y<n and board[x+1][y]==word[count] and visted[x+1][y]==0:

               

                visted[x+1][y]=1

                tmp1 = dfs(x+1,y,count)

                tmp = tmp or tmp1

                visted[x+1][y]=0

            if x>=1 and x<m and y>=0 and y<n and board[x-1][y]==word[count] and visted[x-1][y]==0:

                visted[x-1][y]=1

                tmp2 = dfs(x-1,y,count)

                tmp = tmp or tmp2

                visted[x-1][y]=0

            if x>=0 and x<m and y>=0 and y<n-1 and board[x][y+1]==word[count]  and visted[x][y+1]==0:

                visted[x][y+1]=1

                tmp3 = dfs(x,y+1,count)

                tmp = tmp or tmp3

                visted[x][y+1]=0

            if x>=0 and x<m and y>=1 and y<n and board[x][y-1]==word[count] and visted[x][y-1]==0:

                visted[x][y-1]=1

                tmp4 = dfs(x,y-1,count)

                tmp = tmp or tmp4

                visted[x][y-1]=0

            return tmp

           

       

        for i in range(m):

            for j in range(n):

                visted[i][j]=0


 

        for i in range(m):

            for j in range(n):

                if board[i][j]==word[0]:

                    visted[i][j]=1

                    dfs(i,j,0)

                        # return True

                    visted[i][j]=0  

               



 

        # count=0

        # while self.queue!=[]:

        #     if count==len(word)-1 and self.queue!=[]:

        #         return True

        #     size = len(self.queue)

        #     count+=1

        #     for i in range(size):

        #         tmp = self.queue[0]

        #         del self.queue[0]

        #         x=tmp[0]

        #         y=tmp[1]

        #         if x>=0 and x<m-1 and y>=0 and y<n and board[x+1][y]==word[count] and visted[x+1][y]==0:

        #             self.queue.append([x+1,y])

        #             visted[x+1][y]=1

        #         if x>=1 and x<m and y>=0 and y<n and board[x-1][y]==word[count] and visted[x-1][y]==0:

        #             self.queue.append([x-1,y])

        #             visted[x-1][y]=1

        #         if x>=0 and x<m and y>=0 and y<n-1 and board[x][y+1]==word[count]  and visted[x][y+1]==0:

        #             self.queue.append([x,y+1])

        #             visted[x][y+1]=1

        #         if x>=0 and x<m and y>=1 and y<n and board[x][y-1]==word[count] and visted[x][y-1]==0:

        #             self.queue.append([x,y-1])

        #             visted[x][y-1]=1

           

        return self.ret


 

               



 

       

这里我们的结构是使用dfs回溯遍历,因为每次开始之后遍历完之后visted需要变回原样


http://www.kler.cn/a/456457.html

相关文章:

  • Python 爬虫
  • STM32学习之 按键/光敏电阻 控制 LED/蜂鸣器
  • Ftrace: 深入探究Linux内核的追踪利器
  • Spring ----深入理解AOP(面向切面编程)
  • Linux下shell基本命令之vi用法及示例
  • Unity3d UGUI如何优雅的实现Web框架(Vue/Rect)类似数据绑定功能(含源码)
  • 【Axure高保真原型】输入框控制标签
  • 探索Spring Cloud Config:构建高可用的配置中心
  • 5.npm包
  • 如何配置线程池参数,才能创建性能最好、最稳定的Spring异步线程池?
  • StarRocks元数据无法合并
  • 力扣-数据结构-5【算法学习day.76】
  • Spring 框架基础知识
  • 【设计模式学习笔记】1. 设计模式概述
  • 系统设计及解决方案
  • EndtoEnd Object Detection with Transformers
  • BOOST 库在缺陷检测领域的应用与发展前景
  • 1、redis的基础知识和类型
  • Docker部署neo4j
  • JDBC(Tomcat)
  • 深入探索哈夫曼编码与二叉树的遍历
  • 三、STM32MP257系列之定制Yocto Machine
  • 《PHP MySQL 插入数据》
  • Pytorch | 利用VA-I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
  • SD ComfyUI工作流 对人物图像进行抠图并替换背景
  • numpy的repeat和pytorch的repeat区别