Python描述 LeetCode 79. 单词搜索
原创
©著作权归作者所有:来自51CTO博客作者亓官劼_的原创作品,请联系作者获取转载授权,否则将追究法律责任
Python描述 LeetCode 79. 单词搜索
大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~
如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.
本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。
题目
给定一个 m x n
二维字符网格 board
和一个字符串单词 word
。如果 word
存在于网格中,返回 true
;否则,返回 false
。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例 1:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true
示例 2:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
输出:true
示例 3:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
输出:false
提示:
-
m == board.length
-
n = board[i].length
-
1 <= m, n <= 6
-
1 <= word.length <= 15
-
board
和 word
仅由大小写英文字母组成
**进阶:**你可以使用搜索剪枝的技术来优化解决方案,使其在 board
更大的情况下可以更快解决问题?
Python描述
爆搜,这里每个单词只能用一次,加一个访问数组控制
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
res = False
n,m,lw = len(board),len(board[0]),len(word)
dr = [[-1,0],[0,1],[1,0],[0,-1]]
v = [[0 for _ in range(m)] for __ in range(n)]
def dfs(dx,dy,pos):
nonlocal res,lw,word
if pos == lw:
res = True
return
for d in range(4):
nx,ny = dx+dr[d][0], dy+dr[d][1]
if 0 <= nx < n and 0 <= ny < m and v[nx][ny] == 0 and board[nx][ny] == word[pos]:
v[nx][ny] = 1
dfs(nx,ny,pos+1)
v[nx][ny] = 0
for i in range(n):
for j in range(m):
if board[i][j] == word[0]:
v[i][j] = 1
dfs(i,j,1)
if res:
return res
v[i][j] = 0
return False