目录

  • 79 单词搜索
  • 212 单词搜索II

79 单词搜索

class Solution(object):#深度搜索def exist(self, board, word):self.flag=0self.len=len(word)m, n =len(board),len(board[0])# 找起始位for i in range(m):for j in range(n):if board[i][j]==word[0]:self.dfs(board,i,j,0)if self.flag: return Truereturn Falsedef dfs(self,board,x,y,index):#k为所查单词的下标位m,n=len(board),len(board[0])if self.flag or x < 0 or x >= n or y < 0 or y >= m or board[x][y] == 0 or board[x][y] != word[index]: returnif index==self.len-1:self.flag=1returnfor i, j in [(x - 1, y), (x, y - 1), (x + 1, y), (x, y + 1)]:pre=board[x][y]board[x][y]=0self.dfs(board, i, j, index+1)board[x][y]=pre

212 单词搜索II

class Solution(object):def findWords(self,board,words):self.END_OF_WORD="#"if not board or not board[0]:return []if not words:return []self.result=set()#构建trie树root=collections.defaultdict()for word in words:node=rootfor char in word:node=node.setdefault(char,collections.defaultdict())node[self.END_OF_WORD]=self.END_OF_WORDself.m,self.n=len(board),len(board[0])for i in range(self.m):for j in range(self.n):if board[i][j] in root:self._dfs(board,i,j,"",root)#将结果转为listreturn list(self.result)def _dfs(self,board,i,j,cur_word,cur_dict):#查询数组,i,j,当前词汇,当前trie树搜寻节点dx=[0,0,1,-1]dy=[1,-1,0,0]cur_word+=board[i][j]cur_dict=cur_dict[board[i][j]]#是否为叶子节点if self.END_OF_WORD in cur_dict:self.result.add(cur_word)#查过的位置用@符号标志,并记录之前位置上的值->用于回溯temp,board[i][j]=board[i][j],"@"for k in range(4):x,y=i+dx[k],j+dy[k]if 0<=x<self.m and 0<=y<self.n \and board[x][y] !="@" and board[x][y] in cur_dict:self._dfs(board,x,y,cur_word,cur_dict)board[i][j]=temp

上述代码解释:

#以下面示例为例:
board = [["o", "a", "a", "n"], ["e", "t", "a", "e"], ["i", "h", "k", "r"], ["i", "f", "l", "v"]]
words = ["oath","pea","eat","rain"]

构建好的trie树为:

root=defaultdict(None,{'o': defaultdict(None, {'a': defaultdict(None, {'t': defaultdict(None, {'h': defaultdict(None, {'#': '#'})})})}),'p': defaultdict(None, {'e': defaultdict(None, {'a': defaultdict(None, {'#': '#'})})}),'e': defaultdict(None, {'a': defaultdict(None, {'t': defaultdict(None, {'#': '#'})})}),'r': defaultdict(None, {'a': defaultdict(None, {'i': defaultdict(None, {'n': defaultdict(None, {'#': '#'})})})})}
)

力扣—— 79/212. 单词搜索相关推荐

  1. 回溯法解决力扣79题单词搜索

    回溯法解决力扣79题单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母 ...

  2. leetcode: 212. 单词搜索II

    212. 单词搜索II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/word-search-ii 给定一个 m x n 二维字符网格 board和 ...

  3. 【每日一题】212. 单词搜索 II

    212. 单词搜索 II 题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻 ...

  4. Java实现 LeetCode 212 单词搜索 II(二)

    212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中&quo ...

  5. 【亡羊补牢】挑战数据结构与算法 第19期 LeetCode 212. 单词搜索 II(字典树,附上JS模板)

    仰望星空的人,不应该被嘲笑 题目描述 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成, ...

  6. [力扣] 501. 二叉搜索树中的众数

    501 二叉搜索树中的众数 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 例如: 给定 BST [1,null,2,2], 返回[2]. 提示:如果众数超 ...

  7. LeetCode 212. 单词搜索 II(Trie树+DFS)

    1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...

  8. leetcode 212:单词搜索II

    题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其 ...

  9. leetcode 79: 单词搜索

    题目描述: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母顺序,通过相邻的单 ...

最新文章

  1. 百度离职员工吐槽:整天除了工作还要演好戏,拍马屁,心太累!
  2. (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)...
  3. SQL 查询横表变竖表
  4. 和情商高的人聊天是什么样的体验?
  5. oracle中的视图
  6. 邮件系统IP被CBL列黑,怎么样里面申诉呢?
  7. python计算工资编程-免费直播 | 编程小白如何通过学习Python获得超高工资
  8. 求推荐民法论文选题?
  9. Matlab:Matlab 软件学习之GUI图像用户界面简介(工具栏/菜单栏/对话框)、GUI界面设计案例应用(设计二级菜单栏)之详细攻略
  10. 安卓搞机教程--修改设置里 添加选项 添加文字 修改图标 修改版本号等等 实例解析
  11. 购买嵌入式硬件,焊接设备避坑指南/自用工具推荐
  12. 树莓派4b 创乐博 7寸 1920*1200 分辨率触摸屏校准
  13. 数论基础题(1) 费马引理+卡特兰数+Lucas定理+同余方程+扩欧
  14. html+js 调用摄像头识别二维码
  15. HG_REPMGR autofailvoer自动故障转移
  16. 小程序成为多社交平台引流利器
  17. misra c编码规范个人整理总结/misra c 2012中文版-个人总结-【方便查询】
  18. Commvault蔡报永:点亮你的暗数据
  19. “Let’s Eat Grandma”:标点符号(句法树)增强语义表达,用于情感分析
  20. 我们终究遇上更优秀的自己,挥手向2022年告别吧|2022年度总结

热门文章

  1. Django3Vue3前后端分离项目
  2. python列表元素循环左移_JavaScript系列——数组元素左右移动N位算法实现
  3. api postmain 鉴权_API鉴权
  4. python文件输入符_python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)...
  5. HNU 实验五 猴导师
  6. win10 mysql登录密码忘了_64位 windows10,MYSQL8.0.13重置密码(忘记密码或者无法登录)...
  7. 计算机组成原理 第四章 指令系统
  8. Python 爬虫技巧
  9. 回归(regression)——统计学习方法
  10. 使用maven构建多模块项目