题目描述:

方法一;回溯

class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
max_x,max_y,max_step = len(board)-1,len(board[0])-1,len(word)-1
def maze(x, y,step,visited):
if visited[x][y]==1:
return False
if board[x][y] != word[step]:
return False
if step==max_step:
return True
visited[x][y]=1
if x < max_x and maze(x+1,y,step+1,visited):
return True
if x>0 and maze(x-1,y,step+1,visited):
return True
if y<max_y and maze(x,y+1,step+1,visited):
return True
if y>0 and maze(x,y-1,step+1,visited):
return True
# 记得失败后要置零
visited[x][y]=0
return False
visited = [[0]*(max_y+1) for i in range(max_x+1)]
for x in range(max_x+1):
for y in range(max_y+1):
if board[x][y] != word[0]:
continue
if maze(x,y,0,visited):
return True
return False

优化:

class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
if not board: return False
row = len(board)
col = len(board[0]) def dfs(word, i, j, visited):
if not word:
return True
for li, lj in [[0,1],[1,0],[-1,0],[0,-1]]:
tmp_i = i + li
tmp_j = j + lj
if 0 <= tmp_i < row and 0 <= tmp_j < col and word[0] == board[tmp_i][tmp_j] and (tmp_i,tmp_j) not in visited:
visited.add((tmp_i,tmp_j))
if dfs(word[1:], tmp_i,tmp_j, visited): return True
visited.remove((tmp_i,tmp_j))
return False for i in range(row):
for j in range(col):
if board[i][j] == word[0] and dfs(word[1:], i, j,{(i,j)} ):
return True
return False

leetcood学习笔记-79-单词搜索的更多相关文章

  1. leetcood学习笔记-501- 二叉搜索树中的众数

    题目描述: 方法一: class Solution: def findMode(self, root: TreeNode) -> List[int]: if not root: return [ ...

  2. SQL反模式学习笔记17 全文搜索

    目标:全文搜索 使用SQL搜索关键字,同时保证快速和精确,依旧是相当地困难. SQL的一个基本原理(以及SQL所继承的关系原理)就是一列中的单个数据是原子性的. 反模式:模式匹配 使用Like 或者正 ...

  3. Leetcode之回溯法专题-79. 单词搜索(Word Search)

    Leetcode之回溯法专题-79. 单词搜索(Word Search) 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元 ...

  4. Java实现 LeetCode 79 单词搜索

    79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...

  5. [LeetCode题解]79. 单词搜索

    题目描述 题目:79. 单词搜索 解题思路 遍历 首先找重复性,题目说给定单词是否存在于二维数组中,可以简化为从 (x, y) 走 n 步(n 表示单词长度),查看给定单词是否存在.然后再遍历二维数组 ...

  6. [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Leetcode 79.单词搜索

    单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单 ...

  8. leetcood学习笔记-58-最后一个单词的长度

    题目描述: 第一次解答: class Solution: def lengthOfLastWord(self, s: str) -> int: L=s.strip().split(" ...

  9. LeetCode 79.单词搜索 - JavaScript

    题目描述:给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单 ...

随机推荐

  1. Android高级架构进阶之数据传输与序列化

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述数据传输与序列化: [Serializable原理] ...

  2. UncategorizedSQLException异常处理办法

    如题,先贴console org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQ ...

  3. python接口自动化(响应对象方法)

    python接口自动化(响应对象方法) 一.encoding作用 获取请求的编码(在不设置响应编码时,响应的信息默认使用的是请求的编码格式):r.encoding 设置响应的编码:r.encoding ...

  4. bootstrap-自带插件(完成的小功能)

    模态框 务必将模态框的HTML代码放在文档的最高层级内(也就是说,尽量作为 body 标签的直接子元素),以避免其他组件影响模态框的展现和/或功能. <!-- 触发模态框的按钮 --> & ...

  5. debug breakpoint with maven in eclipse

  6. css translate/rotate 空间坐标轴

    参考:https://www.cnblogs.com/zhangnan35/p/10709876.html https://www.cnblogs.com/zyrblog/p/11142624.htm ...

  7. 【转】移动前端开发之viewport的深入理解

    原文链接:https://blog.csdn.net/u012402190/article/details/70172371 笔记 (20180919,目前暂且只看一部分)

  8. MYSql 存储过程自定义跳出

    MYSql存储过程自定义跳出 我们有时会在存储过程中进行一些判断,当判断条件达成时候我们有时会直接跳出存储过程. 但是存储过程不支持return直接返回的操作, 所以我们只能采用另一种方法,'leav ...

  9. 辞职信也要玩出高big

    辞职信尊敬的各位公司领导:值此用人之际,不期请辞,实属不敬.历经四季,余以凡才,承蒙殊待,幸受公司各位领导知遇之恩,得以与诸位贤达公事.时光荏苒,吾经竭力而为,以图报效,虽幸遇领导执手相教,然资质愚钝 ...

  10. Window10 64bit Tomcat9 安装

    最近正在做一个小项目,需要用到Tomcat部署java web. 准备: 1.window 10 64bit 2.jdk1.8.0_181(请自行安装,记得配置好JAVA_HOME) 3.tomcat ...