力扣链接:https://leetcode.cn/problems/word-search-ii/description/

思路:

先建立字典树,将单词插入树中,建立ed数组表示cur节点的单词结尾表示的这个单词

建立pass数组表示经过多少次cur节点,初始化cur节点为1

建树后,使用dfs,每次递归后,将之前路径的board[i][j]设置为0,回溯后重置,保证不会重复,经历节点,

再正常对边界进行处理

题解:

const int N = 3e5;
class Solution {
public:
int cnt;
int tree[N][26];
int pass[N];
string ed[N];
vector<string>ans; void insert(string s)
{
int cur=1;
pass[cur]++;
for(int i=0,path;i<s.size();i++)
{
path = s[i]-'a';
if(tree[cur][path]==0)tree[cur][path]=++cnt;
cur = tree[cur][path];
pass[cur]++;
}
ed[cur]=s; } void build(vector<string>& words)
{
cnt=1;
for(int i=0;i<words.size();i++)
{
insert(words[i]);
} } int dfs(vector<vector<char>>&board,int i,int j,int cur)
{
if(i<0||i>=board.size()||j<0||j>=board[0].size()||board[i][j]==0)return 0; char tmp = board[i][j];
int path = tmp-'a';
cur = tree[cur][path];
if(pass[cur]==0)return 0; int fix=0;
if(ed[cur].size()!=0)
{
fix++;
ans.push_back(ed[cur]);
ed[cur].clear();
}
board[i][j]=0;
fix+=dfs(board,i+1,j,cur);
fix+=dfs(board,i-1,j,cur);
fix+=dfs(board,i,j+1,cur);
fix+=dfs(board,i,j-1,cur);
pass[cur]-=fix;
board[i][j]=tmp;
return fix; } vector<string> findWords(vector<vector<char>>& board, vector<string>& words) {
build(words);
for(int i=0;i<board.size();i++)
{
for(int j=0;j<board[0].size();j++)
{
dfs(board,i,j,1);
}
}
return ans; }
};

leedcode:212. 单词搜索 II (trie树,dfs,剪枝)的更多相关文章

  1. Leetcode之回溯法专题-212. 单词搜索 II(Word Search II)

    Leetcode之回溯法专题-212. 单词搜索 II(Word Search II) 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单 ...

  2. [LeetCode] 212. 单词搜索 II

    题目链接:https://leetcode-cn.com/problems/word-search-ii/ 题目描述: 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在 ...

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

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

  4. [leetcode] 212. 单词搜索 II(Java)

    212. 单词搜索 II 这leetcode的评判机绝对有问题!!同样的代码提交,有时却超时!害得我至少浪费两个小时来寻找更优的答案= =,其实第一次写完的代码就可以过了,靠!!!第207位做出来的 ...

  5. Leetcode 212.单词搜索II

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

  6. 212. 单词搜索 II

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

  7. Java实现 LeetCode 212 单词搜索 II

    public class Find2 { public int[] dx={1,-1,0,0}; public int[] dy={0,0,1,-1}; class Trie{ Trie[] trie ...

  8. cogs 647. [Youdao2010] 有道搜索框 Trie树 字典树

    647. [Youdao2010] 有道搜索框 ★☆   输入文件:youdao.in   输出文件:youdao.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 在有 ...

  9. Trie树 + DFS - CSU 1457 Boggle

    Boggle Problem's Link: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1457 Mean: 给定n个串,有m个询问. 每个询问 ...

  10. 单词搜索 II · Word Search II

    [抄题]: 给出一个由小写字母组成的矩阵和一个字典.找出所有同时在字典和矩阵中出现的单词.一个单词可以从矩阵中的任意位置开始,可以向左/右/上/下四个相邻方向移动. 给出矩阵: doafagaidca ...

随机推荐

  1. IntelliJ IDEA 中,项目文件右键菜单没有svn选项解决办法

    问题描述 欲在IntelliJ IDEA中提交文件至SVN,但是在项目文件上点击右键时,发现右键菜单中没有Subversion的选项,正常情况下是要有的,如下图所示: 图0 解决办法 点击菜单:VCS ...

  2. [转]编译报错:virtual memory exhausted: Cannot allocate memory

    一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...

  3. IntelliJ IDEA FIX协议报文解析插件

    Fix协议报文手动对照对手方的API查看十分繁琐,尤其是在开发的过程中. 于是我写了一个Fix协议报文解析插件,在idea插件应用市场搜索"Fix Protocol Parser" ...

  4. linux系统qcow2镜像的制作

    一.简单说明 PS: 最近有客户需要在云平台上部署我们的产品,好久没有做过qcow2镜像了,这里还是把制作流程记录下来. QCOW2镜像格式是Qemu支持的磁盘镜像格式之一.它可以使用一个文件来表示一 ...

  5. 对于PHP数组反转的算法的深度理解

    本文由 ChatMoney团队出品 在 PHP 开发中,数组反转是一个常见的操作,它涉及到将数组的键值对或者键的顺序进行倒序排列.本文将深入探讨 PHP 数组反转的算法,并提供相应的代码示例. 一.P ...

  6. [2025.5.11 鲜花/rain] 非适应性白日梦

    [2025.5.11 鲜花/rain] 非适应性白日梦 感觉人类太可悲了,连一些动物最基本的本能反应都不被允许 猫的应激反应是被允许的,人类的就是不被允许的,甚至 应激这一词的定义,对大部分人来说,都 ...

  7. Java学习篇(三)—— 集合框架

    集合框架是什么? 对容器的学习建议结合leecode,了解每一个容器的增删改查操作. 数据结构里学习了几种数据结构类型:数组.链表.栈.队列.树.哈希表.堆.在C++中,C++ STL提供了数组vec ...

  8. Golang基础笔记六之流程控制

    本文首发于公众号:Hunter后端 原文链接:Golang基础笔记六之流程控制 本篇笔记介绍 Golang 里流程控制相关的一些语法,以下是本篇笔记目录: 条件语句 循环语句 1.条件语句 1. if ...

  9. K8s 1.29.3 on Docker

    初始化 # 关闭防火墙 selinux systemctl disable --now firewalld setenforce 0 sed -i '/SELINUX=/s@enforcing@dis ...

  10. SQL Server 插入自增列

    set identity_insert t on insert into t (id, name) values(1, 'sqlstudy') set identity_insert t off ht ...