力扣—— 79/212. 单词搜索
目录
- 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. 单词搜索相关推荐
- 回溯法解决力扣79题单词搜索
回溯法解决力扣79题单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母 ...
- leetcode: 212. 单词搜索II
212. 单词搜索II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/word-search-ii 给定一个 m x n 二维字符网格 board和 ...
- 【每日一题】212. 单词搜索 II
212. 单词搜索 II 题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻 ...
- Java实现 LeetCode 212 单词搜索 II(二)
212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中&quo ...
- 【亡羊补牢】挑战数据结构与算法 第19期 LeetCode 212. 单词搜索 II(字典树,附上JS模板)
仰望星空的人,不应该被嘲笑 题目描述 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成, ...
- [力扣] 501. 二叉搜索树中的众数
501 二叉搜索树中的众数 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 例如: 给定 BST [1,null,2,2], 返回[2]. 提示:如果众数超 ...
- LeetCode 212. 单词搜索 II(Trie树+DFS)
1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...
- leetcode 212:单词搜索II
题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其 ...
- leetcode 79: 单词搜索
题目描述: 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母顺序,通过相邻的单 ...
最新文章
- 百度离职员工吐槽:整天除了工作还要演好戏,拍马屁,心太累!
- (转)[EntLib]微软企业库5.0 学习之路——第十步、使用Unity解耦你的系统—PART2——了解Unity的使用方法(1)...
- SQL 查询横表变竖表
- 和情商高的人聊天是什么样的体验?
- oracle中的视图
- 邮件系统IP被CBL列黑,怎么样里面申诉呢?
- python计算工资编程-免费直播 | 编程小白如何通过学习Python获得超高工资
- 求推荐民法论文选题?
- Matlab:Matlab 软件学习之GUI图像用户界面简介(工具栏/菜单栏/对话框)、GUI界面设计案例应用(设计二级菜单栏)之详细攻略
- 安卓搞机教程--修改设置里 添加选项 添加文字 修改图标 修改版本号等等 实例解析
- 购买嵌入式硬件,焊接设备避坑指南/自用工具推荐
- 树莓派4b 创乐博 7寸 1920*1200 分辨率触摸屏校准
- 数论基础题(1) 费马引理+卡特兰数+Lucas定理+同余方程+扩欧
- html+js 调用摄像头识别二维码
- HG_REPMGR autofailvoer自动故障转移
- 小程序成为多社交平台引流利器
- misra c编码规范个人整理总结/misra c 2012中文版-个人总结-【方便查询】
- Commvault蔡报永:点亮你的暗数据
- “Let’s Eat Grandma”:标点符号(句法树)增强语义表达,用于情感分析
- 我们终究遇上更优秀的自己,挥手向2022年告别吧|2022年度总结
热门文章
- Django3Vue3前后端分离项目
- python列表元素循环左移_JavaScript系列——数组元素左右移动N位算法实现
- api postmain 鉴权_API鉴权
- python文件输入符_python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)...
- HNU 实验五 猴导师
- win10 mysql登录密码忘了_64位 windows10,MYSQL8.0.13重置密码(忘记密码或者无法登录)...
- 计算机组成原理 第四章 指令系统
- Python 爬虫技巧
- 回归(regression)——统计学习方法
- 使用maven构建多模块项目