leetcode刷题-79单词搜索
题目
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
]
给定 word = "ABCCED", 返回 true
给定 word = "SEE", 返回 true
给定 word = "ABCB", 返回 false
思路
使用深度遍历搜索:每次都对一个点深度遍历,利用marked二维数组来确定当前节点是否可以访问
实现
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
self.row_len = len(board)
if self.row_len == 0:
return False
self.col_len = len(board[0])
self.marked = [[False for i in range(self.col_len)] for i in range(self.row_len)]
self.directions = [(0, -1), (-1, 0), (0, 1), (1, 0)]
for i in range(self.row_len):
for j in range(self.col_len):
if self.__dfs(board, word, 0 ,i ,j):
return True
return False def __dfs(self, board, word, index, row_index, col_index):
if index == len(word) -1:
return board[row_index][col_index] == word[index]
if board[row_index][col_index] == word[index]:
self.marked[row_index][col_index] = True
for direction in self.directions:
new_row_index = row_index + direction[0]
new_col_index = col_index + direction[1]
if 0 <= new_row_index < self.row_len and \
0 <= new_col_index < self.col_len and \
self.marked[new_row_index][new_col_index] is False and \
self.__dfs(board, word, index+1, new_row_index, new_col_index):
return True
self.marked[row_index][col_index] = False
return False
leetcode刷题-79单词搜索的更多相关文章
- Leetcode之回溯法专题-79. 单词搜索(Word Search)
Leetcode之回溯法专题-79. 单词搜索(Word Search) 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元 ...
- Java实现 LeetCode 79 单词搜索
79. 单词搜索 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格. ...
- [LeetCode题解]79. 单词搜索
题目描述 题目:79. 单词搜索 解题思路 遍历 首先找重复性,题目说给定单词是否存在于二维数组中,可以简化为从 (x, y) 走 n 步(n 表示单词长度),查看给定单词是否存在.然后再遍历二维数组 ...
- C#LeetCode刷题-数组
数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...
- ACM金牌选手整理的【LeetCode刷题顺序】
算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...
- leetcode刷题目录
leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...
- LeetCode刷题总结-树篇(中)
本篇接着<LeetCode刷题总结-树篇(上)>,讲解有关树的类型相关考点的习题,本期共收录17道题,1道简单题,10道中等题,6道困难题. 在LeetCode题库中,考察到的不同种类的树 ...
- C#LeetCode刷题-字典树
字典树篇 # 题名 刷题 通过率 难度 208 实现 Trie (前缀树) 48.6% 中等 211 添加与搜索单词 - 数据结构设计 39.9% 中等 212 单词搜索 II 27.9% ...
- C#LeetCode刷题-设计
设计篇 # 题名 刷题 通过率 难度 146 LRU缓存机制 33.1% 困难 155 最小栈 C#LeetCode刷题之#155-最小栈(Min Stack) 44.9% 简单 173 二叉搜索 ...
随机推荐
- JQuery的turn.js实现翻书效果
前言: hello大家好~好久没更博了……今天来和大家分享下JQ的turn.js,下面我先来简单介绍下我们今天的主角turn.js. Turn.js是一个JavaScript库,它集合了HTML5的所 ...
- 2020-05-07:具体讲一下CMS流程
福哥答案2020-05-07: 福哥口诀法:C初并重清(初始标记.并发标记.重新标记.并发清除) 整个过程分为 4 个步骤,包括:初始标记:仅仅只是标记一下 GCRoots 能直接关联到的对象,速度很 ...
- golang的树结构三种遍历方式
package main import "log" type node struct { Item string Left *node Right *node } type bst ...
- 深度强化学习:Deep Q-Learning
在前两篇文章强化学习基础:基本概念和动态规划和强化学习基础:蒙特卡罗和时序差分中介绍的强化学习的三种经典方法(动态规划.蒙特卡罗以及时序差分)适用于有限的状态集合$\mathcal{S}$,以时序差分 ...
- 快速排序&&归并排序
快速排序 快速排序采用的是分治的策略,算法的具体实现过程是 1.确定一个数X(一般是选中间值X=q[l+r>>1]) 2.利用指针i,j,将数组中比X小的数放在一边,比X大的数放在另一边 ...
- Android 使用AS编译出错:Error: Duplicate resources
原因在于drawable目录下有重复的文件名!!! 修改其中的一个文件名或者删除其中一张图(或者xml文件)就可以啦~
- 二叉搜索树及java实现
二叉搜索树(Binary Search Tree) 二叉搜索树是二叉树的一种,是应用非常广泛的一种二叉树,英文简称为 BST 又被称为:二叉查找树.二叉排序树 任意一个节点的值都大于其左子树所有节 ...
- Magento add product attribute and assign to all group
$attributes = array( 'product_type' => array( 'type' => 'int', 'input' => 'select', 'source ...
- go thrift demo
接口:https://gowalker.org/github.com/apache/thrift/lib/go/thrift 参考文件:https://cong.im/2018/05/14/other ...
- CentOS ISO 下载地址
x86_64:https://wiki.centos.org/Download ARM:http://mirror.nsc.liu.se/centos-store/altarch/ http://dl ...