leetcode_79. 单词搜索

举报
悲恋花丶无心之人 发表于 2021/02/05 00:15:12 2021/02/05
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board = [   ['A','B','C','E'], ...

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]

给定 word = "ABCCED", 返回 true
给定 word = "SEE", 返回 true
给定 word = "ABCB", 返回 false

提示:

board 和 word 中只包含大写和小写英文字母。
1 <= board.length <= 200
1 <= board[i].length <= 200
1 <= word.length <= 10^3

二、解题思路

DFS+回溯,注意被使用过的元素需要进行标记

三、代码


  
  1. class Solution:
  2. def exist(self, board: list, word: str) -> bool:
  3. m = len(board)
  4. n = len(board[0])
  5. l = len(word)
  6. mark = [[0 for _ in range(n)] for _ in range(m)]
  7. if m == 0 or n == 0:
  8. return False
  9. def dfs(index, x, y):
  10. # print(x, y)
  11. # print(board[x][y], index)
  12. if index == l:
  13. return True
  14. if x < 0 or x >= m or y < 0 or y >= n:
  15. return False
  16. if board[x][y] != word[index]:
  17. # print(board[x][y], word[index])
  18. return False
  19. # print(board[x][y], (x, y))
  20. if mark[x][y] == 0:
  21. mark[x][y] = 1
  22. else:
  23. return False
  24. for i in range(index, l):
  25. if dfs(i + 1, x + 1, y) or dfs(i + 1, x - 1, y) or dfs(i + 1, x, y + 1) or dfs(i + 1, x, y - 1):
  26. return True
  27. mark[x][y] = 0
  28. break
  29. return False
  30. for i in range(m):
  31. for j in range(n):
  32. if board[i][j] == word[0]:
  33. if dfs(0, i, j):
  34. return True
  35. return False
  36. if __name__ == '__main__':
  37. board = [["A","B","C","E"],
  38. ["S","F","C","S"],
  39. ["A","D","E","E"]]
  40. word = "ABCB" #""SEE" # "ABCCED"
  41. s = Solution()
  42. ans = s.exist(board, word)
  43. print(ans)

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/108562065

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。