0
点赞
收藏
分享

微信扫一扫

【LeetCode】79. 单词搜索


0. 总结

  • 确定返回的结果是什么?
  • 我在返回值的问题上又犯错了 ┭┮﹏┭┮

1. 题目

79.​​单词搜索​​

2. 分析

写递归代码一个非常重要的点就是递归边界,需要判断什么时候结束程序,该返回什么值?比如下面这段代码,如果我们在深搜的时候找到了任意一个合理的解,那么就不用接着往下找了,所以有下面这段代码:

# 如果当前这个分支就能够满足条件,就不要再继续往下搜索了,直接返回
# 所以代码的体现就是:if (True): return True
if self.dfs(x-1,y,m,n,cnt+1,vis,word,board):
return True

3. 代码

from typing import List
class Solution:
def exist(self, board: List[List[str]], word: str) -> bool:
m = len(board) # m行
n = len(board[0]) # n列
vis = [ [0 for i in range(n)] for i in range(m)] # 代表是否访问过
cnt = 0 # 代表当前访问的位置
# print(vis)
for i in range(m):
for j in range(n):
if self.dfs(i,j,m,n,cnt,vis,word,board): # 传入两个字符进行深搜
return True
return False

# 遍历各个位置的数据
# cnt 表示当前正在访问的信息
def dfs(self,x,y,m,n,cnt,vis,word,board):
if cnt < len(word) and board[x][y] == word[cnt]:
vis[x][y] = 1
if cnt == len(word)-1:
return True

# 向上扩散
if(x-1 >= 0 and vis[x-1][y] == 0):
# 如果当前这个分支就能够满足条件,就不要再继续往下搜索了,直接返回
# 所以代码的体现就是:if (True): return True
if self.dfs(x-1,y,m,n,cnt+1,vis,word,board):
return True

# 向下扩散
if(x+1 < m and vis[x+1][y] == 0 ):
if self.dfs(x+1,y,m,n,cnt+1,vis,word,board):
return True

# 向左
if(y-1 >= 0 and vis[x][y-1] == 0):
if self.dfs(x,y-1,m,n,cnt+1,vis,word,board):
return True

# 向右
if(y+1 <n and vis[x][y+1] == 0 ):
if self.dfs(x,y+1,m,n,cnt+1,vis,word,board):
return True

vis[x][y] = 0 # 还原
else:
return False

board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]]
word = "ABCCED"
s = Solution()
res = s.exist(board,word)
print(res)



举报

相关推荐

0 条评论