leetcood学习笔记-79-单词搜索
题目描述:
方法一;回溯
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-单词搜索的更多相关文章
- leetcood学习笔记-501- 二叉搜索树中的众数
题目描述: 方法一: class Solution: def findMode(self, root: TreeNode) -> List[int]: if not root: return [ ...
- SQL反模式学习笔记17 全文搜索
目标:全文搜索 使用SQL搜索关键字,同时保证快速和精确,依旧是相当地困难. SQL的一个基本原理(以及SQL所继承的关系原理)就是一列中的单个数据是原子性的. 反模式:模式匹配 使用Like 或者正 ...
- Leetcode之回溯法专题-79. 单词搜索(Word Search)
Leetcode之回溯法专题-79. 单词搜索(Word Search) 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元 ...
- Java实现 LeetCode 79 单词搜索
79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...
- [LeetCode题解]79. 单词搜索
题目描述 题目:79. 单词搜索 解题思路 遍历 首先找重复性,题目说给定单词是否存在于二维数组中,可以简化为从 (x, y) 走 n 步(n 表示单词长度),查看给定单词是否存在.然后再遍历二维数组 ...
- [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Leetcode 79.单词搜索
单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单 ...
- leetcood学习笔记-58-最后一个单词的长度
题目描述: 第一次解答: class Solution: def lengthOfLastWord(self, s: str) -> int: L=s.strip().split(" ...
- LeetCode 79.单词搜索 - JavaScript
题目描述:给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格.同一个单 ...
随机推荐
- 关于版本管理工具SVN
曾经使用过Git,但是目前使用的是相对简单的svn. 刚使用的时候,如果不出意外.会有同学配好环境与权限. 前端只需要将代码下载,修改,更新,与上传. 一 .下载 1.本地新建文件夹,作为本地仓库 命 ...
- mac 如何卸载node和npm采坑之旅
因为本地npm一直报错,所以决定直接卸载node和npm,重新装.第一次卸载,具体咱也不会呀!能咋整呢,百度呗 茫茫百度中各种找呀,找到一个转载最多的方法 sudo npm uninstall npm ...
- Unicode - 16 位统一超级字符集
描述 (DESCRIPTION) 国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS). UCS 包含所有别的字符集标准里的字符,并且保证了 ...
- Java.util.Map的实现类有那些?
1.HashMap 2.Hashtable 3.LinkedHashMap 4.TreeMap
- vue cli3 vue.config配置
跳地址:https://cli.vuejs.org/zh/config/#publicpath
- loj2001[SDOI2017]树点染色
题意:给你一棵树,一开始每个点上的颜色互不相同.三种操作:op1:x到根的路径上的点都染上一种新的颜色.op2:设一条路径的权值为val(x,y),求x到y路径的val.op3:询问x的子树中最大的到 ...
- 小程序怎样将字符串转化为html
在小程序中通过rich-text 标签,使用nodes将字符串转化为html <rich-text class="allAnswer " nodes='<span c ...
- c++ TCP 获取客户端IP
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #i ...
- Ruby 类和对象
Ruby 类和对象 Ruby 是一种完美的面向对象编程语言.面向对象编程语言的特性包括: 数据封装 数据抽象 多态性 继承 这些特性将在 面向对象的 Ruby 中进行讨论. 一个面向对象的程序,涉及到 ...
- bzoj1008题解
[题意分析] 求长度为n,元素大小在[1,m]∩N的序列中,有多少个序列中存在相同的相邻元素. [解题思路] 小学奥数题.. 总序列数:S=mn 不存在相同的相邻元素的序列数:T=m*(m-1)n-1 ...