力扣链接: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. VScode中的自定义模板

    1.背景 在用bootstrap框架,写前端代码时,由于每个页面都有固定的模板格式,比如都包含CDN等,所以在每次写代码的时候,都要重复写这些,效率比较低下.幸运的是,VScode中可以编辑各个语言的 ...

  2. MCP Server 实践之旅第 3 站:MCP 协议亲和性的技术内幕

    作者:柳下,西流 背景 在分布式架构设计中,请求亲和性是实现有状态服务高可用的核心技术,通过将具备相同会话标识的请求智能路由至固定计算节点,保障会话连续性及缓存有效性.然而在 Serverless 范 ...

  3. 为Feign客户端自定义ErrorDecoder

    摘要:重写Feign的错误解码器ErrorDecoder,以自定义业务逻辑.   ErrorDecoder,顾名思义,它是发生错误或者异常情况时使用的一种解码器,允许我们对异常进行特殊处理.   在配 ...

  4. SpringBoot发布webservice服务并调用(hutool yyds)

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 目录 前言 开干 1.涉及技术点 2.整体项目结构 3.Provider 发布Ws服务端 首先,肯定要修改pom文件 依赖加上 3.0 因为用对象的 ...

  5. Libnetwork底层原理以及Docker网络实现

    1.CNM CNM (Container Network Model) 是 Docker 发布的容器网络标准,意在规范和指定容器网络发展标准,CNM 抽象了容器的网络接口 ,使得只要满足 CNM 接口 ...

  6. FFmpeg开发笔记(六十四)使用国产的RedPlayer播放器观看网络视频

    ​RedPlayer是小红书基于FFmpeg4.3研发并开源的国产播放器,它可运行于Android和iOS系统,既支持播放本地视频文件,也支持播放网络上的流媒体链接.有关FFmpeg在Android平 ...

  7. 直播预约丨《袋鼠云大数据实操指南》No.3:数据资产管理实操,如何有效进行数据治理

    近年来,新质生产力.数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕. 面对这些引领经济转型的新兴概念,为了 ...

  8. 浅谈pytest+HttpRunner如何展开接口测试

    数栈是云原生-站式数据中台PaaS,我们在github和gitee上有一个有趣的开源项目:FlinkX,FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,也可以采集实时变 ...

  9. TCP入门简单例子

    TCP的简单例子 TCP最简单聊天室 客户端 连接服务器 Socket 发送消息 package TCP; import java.io.IOException; import java.io.Out ...

  10. 645仪表以JSON格式上发方法

    1.概述 之前我们已经介绍了Modbus RTU仪表实现JSON格式上发云服务器的方法,类似的现在也可以支持645协议的仪表通过JSON格式上发服务器. 卓岚实现645仪表转JSON网关的特点有: 1 ...