题目描述:

方法一;回溯

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. python语言和R语言实现机器学习算法

    <转>机器学习系列(9)_机器学习算法一览(附Python和R代码)   转自http://blog.csdn.net/han_xiaoyang/article/details/51191 ...

  2. ArrayList底层代码解析笔记

    通过底层代码可以学习到很多东西: public class ArrayList<E> extends AbstractList<E> implements List<E& ...

  3. eduCF#61 C. Painting the Fence /// DP 选取k段能覆盖的格数

    题目大意: 给定n m 接下来给定m个在n范围内的段的左右端 l r 求选取m-2段 最多能覆盖多少格 #include <bits/stdc++.h> using namespace s ...

  4. C预处理之宏定义

    #include <stdio.h> //定义不带参数的宏 #define PI 3.14 /*********************************************** ...

  5. RHEL5/6/7中常用命令及命令之间的差异

    System basics Task RHEL5 RHEL6 RHEL7 View subscription information /etc/sysconfig/rhn/systemid /etc/ ...

  6. 如何清除Windows共享登录的用户名密码

    打开cmd 1.[查看已记录的登录信息] net use 2.[清除记录] 得关掉你所有打开的samba之后再 net use * /del

  7. python_django_The requested URL /sunck/login/sunck/showmain/ was not found on this server.错误

    在我url匹配过程中出现了这样一个错误: 网页显示: Not Found The requested URL /sunck/login/sunck/showmain/ was not found on ...

  8. 关于MySQL的insert添加自动获取日期的now()的用法

    例如我的MySQL数据库里有个表table1,它的字段有id,date1,date2,除id外都是Datetime类型的.那么插值语句这样写:insert into table1(date1,date ...

  9. 微信小程序-云开发

    云开发 初始化 wx.cloud.init({ env: 'test-x1dzi' }) 云数据库 数据类型 String,Number,Boolean,Array,Object,Date,GeoPo ...

  10. 数字IC设计工程师成长之路

    学习的课程 仿真工具VCS实践学习 2019年12月9日-2019年12月23日