单词搜索
单词搜索(Word Search) ⭐️⭐️⭐️
LeetCode每日一题 2020.09.13
给定一个二维网格和一个单词, 找出该单词是否存在于网格中。
单词必须按照字母顺序, 通过相邻的单元格内的字母构成, 其中”相邻”单元格是那些水平相邻或垂直相邻的单元格。 同一个单元格内的字母不允许被重复使用。
Example:
1 | board = |
note:
1.board
和word
中只包含大写和小写英文字母.
2.1 <= board.length <= 200
3.1 <= board[i].length <= 200
4.1 <= word.length <= 10^3
题目大意
按照题目大意需要在给定的board
二维数组检索能够组成给定的word
的一条路径
解题思路
- 比如单词
"ABCCED"
。 首先找到单词开头A
,遍历矩阵,找到A
。 - 起点可能不止一个和,基于其中一个
A
, 利用DFS思想能否找出剩下的 “BCCED” 路径。 - 下级字符
B
有四个可选点: 当前A
点的上、下、左、右。 - 逐个尝试每一种选择,去检索是否符合进而对下一个字符选点,又有四种选择,继续尝试检索。此处利用回溯的思想。
- 当发现某个选择四个方向均不符合,结束当前检索,回溯到上一层节点选择其他方向。
- 最终为
ABCCED
找到符合的节点路径 - 关于判断元素是否使用过,我用了一个二维数组
mark
对使用过的元素做标记。
Solution
1 | type pair struct{ x, y int } |
复杂度分析
- 时间复杂度: ,其中
M
,N
为网格的长度与宽度,L
为字符串word
的长度。 - 空间复杂度: 。