Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 0212 - Word Search II

LeetCode 0212 - Word Search II

作者头像
Reck Zhang
发布于 2021-08-11 04:08:32
发布于 2021-08-11 04:08:32
20000
代码可运行
举报
文章被收录于专栏:Reck ZhangReck Zhang
运行总次数:0
代码可运行

Word Search II

Desicription

Given a 2D board and a list of words from the dictionary, find all words in the board.

Each word must be constructed from letters of sequentially adjacent cell, where “adjacent” cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once in a word.

Example:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Input: 
words = ["oath","pea","eat","rain"] and board =
[
  ['o','a','a','n'],
  ['e','t','a','e'],
  ['i','h','k','r'],
  ['i','f','l','v']
]

Output: ["eat","oath"]

Note:

You may assume that all inputs are consist of lowercase letters a-z.

Solution

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
private:
    vector<vector<int>> dir{{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
    struct TrieNode{
        char value;
        vector<TrieNode*> children;

        explicit TrieNode(char c):value(c){};
    };
    TrieNode* root = new TrieNode('#');
    vector<string> result;

    void dfs(vector<vector<char>>& board, int x, int y, string currentString, TrieNode* currentNode) {
        for(auto& childrenNode : currentNode->children) {
            if(board[x][y] == childrenNode->value) {
                currentString += board[x][y];
                for(auto& nextNode : childrenNode->children) {
                    if(nextNode->value == '#') {
                        result.push_back(currentString);
                        childrenNode->children.erase(find(childrenNode->children.begin(), childrenNode->children.end(), nextNode));
                    }
                }
                board[x][y] ^= 255;
                for(int i = 0; i < 4; i++) {
                    int dx = x + dir[i][0];
                    int dy = y + dir[i][1];
                    if(dx < 0 || dx >= board.size() || dy < 0 || dy >= board[0].size()) {
                        continue;
                    }
                    dfs(board, dx, dy, currentString, childrenNode);
                }
                board[x][y] ^= 255;
            }
        }
    }
public:
    vector<string> findWords(vector<vector<char>>& board, vector<string>& words) {
        set<string> wordsSet;
        for(const auto &currentWord : words) {
            wordsSet.insert(currentWord);
        }
        for(auto currentWord : wordsSet) {
            if(currentWord.empty()) {
                result.emplace_back("");
                continue;
            }
            currentWord += "#";
            int index = 0;
            auto pre = root;
            while(currentWord[index]) {
                bool found = false;
                for(auto children : pre->children) {
                    if(children->value == currentWord[index]) {
                        found = true;
                        pre = children;
                        break;
                    }
                }
                if(!found) {
                    auto nextNode = new TrieNode(currentWord[index]);
                    pre->children.push_back(nextNode);
                    pre = nextNode;
                }
                index++;
            }
        }
        if(board.empty() || board[0].empty()) {
            return result;
        }
        for(int i = 0; i < board.size(); i++) {
            for(int j = 0; j < board[0].size(); j++) {
                dfs(board, i, j, "", root);
            }
        }
        return result;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【python可视化】python编码规范、标准库与扩展库对象的导入与使用
哈喽大家好,颜颜yan_的新专栏开启啦~ 本期是python可视化专栏第一期,还请大家多多指教吖~
颜颜yan_
2022/12/05
7180
【python可视化】python编码规范、标准库与扩展库对象的导入与使用
复习python第六天
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
sjw1998
2019/09/28
3250
Python学习(七):模块 优雅的封装
第7 章 模块 优雅的封装 Table of Contents Python中的模块 使用模块 定义模块 建议 模块的安装 模块搜索路径 作用域 编程是一种美德,是促使一个人不断向上发展的一种原动力。 Python中的模块 当我们的代码越写越多,开发的人数越来越多的时候,为了更高效的复用某个代码片段,方法,对象等,这时我们可以把常用的代码,放在一起,使用的人只需要利用这个文件中的代码就可以轻松的实现某些功能,例如上篇中提到了的 power(x,n) 和 create_account(email,passw
双鬼带单
2018/03/29
7.7K0
python之标准库
在unix系统中,不能只简单将字符串‘~/python’添加到sys.path中,必须使用完整路径。如果你希望将这个操作自动化,可以使用sys.path.expanduser('~/python')
py3study
2020/01/07
8680
Python小知识点(4)--模块相关
定义:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是以.py结尾的python文件(文件名:test.py,对应的模块名:test)。
wfaceboss
2019/04/08
4090
Python小知识点(4)--模块相关
Python基础-模块与包
当文件是直接运行时,文件的 __name__ 是 __main__,当文件是被导入时,__name__是文件名。
小团子
2019/07/18
4740
Python基础-模块与包
零基础学习 Python 之模块(一)
随着我们对 Python 的逐步学习,相信 Python 的强大你也感觉到了,它主要体现在 Python 的「模块」上,因为 Python 不仅有很强大的标准库,还有数不胜数的第三方模块(或者包,库),并且许多的开发者还在不断的贡献着自己的新模块。
编程文青李狗蛋
2019/11/07
3170
(九) 初遇python甚是喜爱之Modules模块操作
各位读者大大们大家好,今天学习python的Modules模块操作,并记录学习过程欢迎大家一起交流分享。
XXXX-user
2019/07/23
3650
(九) 初遇python甚是喜爱之Modules模块操作
python模块导入细节
官方手册:https://docs.python.org/3/tutorial/modules.html
py3study
2020/01/18
2.1K0
Python(三)安装扩展库与模块导入
3、创建虚拟环境,如果有可能根据需要使用不同版本的扩展库,这就需要使用Python创建一个虚拟环境。
py3study
2020/01/07
1.2K0
Python使用模块中对象的几种方法
Python默认安装仅包含部分基本或核心模块,启动时也仅加载了基本模块,在需要时再显式地加载(有些模块可能需要先安装)其他模块,这样可以减小程序运行的压力,且具有很强的可扩展性。Python中导入模块的方法主要有: (1)import 模块名 [as 别名] 使用这种方式导入以后,使用时需要在对象之前加上模块名作为前缀,也就是必须以“模块名.对象名”的方式进行访问。也可以为导入的模块设置一个别名,然后就可以使用“别名.对象名”的方式来使用其中的对象了。 >>> import math >>> math.si
Python小屋屋主
2018/04/16
1.3K0
Python 3.x | 史上最详解的 导入(import)「建议收藏」
1、模块、包 **模块 module:**一般情况下,是一个以.py为后缀的文件。其他可作为module的文件类型还有”.pyo”、”.pyc”、”.pyd”、”.so”、”.dll”,但Python初学者几乎用不到。 module 可看作一个工具类,可共用或者隐藏代码细节,将相关代码放置在一个module以便让代码更好用、易懂,让coder重点放在高层逻辑上。 module能定义函数、类、变量,也能包含可执行的代码。module来源有3种: ①Python内置的模块(标准库); ②第三方模块; ③自定义模块。
全栈程序员站长
2022/09/13
11.2K0
Python 3.x | 史上最详解的 导入(import)「建议收藏」
学了半天,import 到底在干啥?
显然会导致我们所不希望的问题,即Python不知道要到哪里去找这个名为B的模块(包是一种特殊的模块):
小小詹同学
2020/11/09
8750
学了半天,import 到底在干啥?
【python】标准库详解
python标准库内置了大量的函数和类,是python解释器里的核心功能之一。该标准库在python安装时候就已经存在。
20岁爱吃必胜客
2023/03/06
1.2K0
【python】标准库详解
1.自定义模块
​ 一个函数封装一个功能,你使用的软件可能就是由n多个函数组成的(先备考虑面向对象)。比如抖音这个软件,不可能将所有程序都写入一个文件,所以咱们应该将文件划分,这样其组织结构要好并且代码不冗余。加入分了10个文件,每个文件里面可能都有相同的功能(函数),怎么办?所以将这些相同的功能封装到一个文件中,那么这个存储着很多常用的功能的py文件,就是模块。 模块就是文件,存放一堆常用的函数,谁用谁拿。怎么拿?比如:我要策马奔腾共享人世繁华,应该怎么样?我应该骑马,你也要去浪,你是不是也要骑马。 我们说一个函数就是一个功能,那么把一些常用的函数放在一个py文件中,这个文件就称之为模块,模块,就是一些列常用功能的集合体。
changxin7
2019/09/10
5380
1.自定义模块
Python模块知识1:模块知识介绍
模块是代码的归类,能定义函数、类和变量,把相关的代码分配到一个模块里,能让你的代码更好用,更易懂、也更简洁。模块在java中叫做类库。 模块的存在方式: 模块可以是单个.py文件,也可以是一个文件(里面存放n多个.py文件)。 1、模块分类: 内置模块:如os和sys是两个非常常见的和操作系统交互的模块;file是文件操作相关的模块;比较常用的一些模块如:logging、time/datetime、json/pickle 自定义模块:自己写的py文件或者文件夹(可含多个py文件) 第三方模块:如reques
企鹅号小编
2018/01/11
7280
Python模块知识1:模块知识介绍
python学习笔记5.1-理解模块和包
摘要总结:本文主要讲解了Python模块和包的基础知识,包括模块和包的定义、作用,以及如何在Python程序中使用它们。同时,文章还介绍了如何在Python程序中添加搜索路径和导入包的方法,并通过实例讲解了如何使用这些方法。
锦小年
2018/01/02
7810
关于Python包非同级导入若干问题
算法理论是一方面,实践又是一方面。尊重每一个可以运行的算法,无论它结果怎么样。这个过程真的是没有地方找人说,程序和数学一样精确,对错看结果就行。
云深无际
2021/09/14
4970
关于Python包非同级导入若干问题
Python学习笔记5—Python模块
    默认情况下,python第三方的模块安装在python 的安装目录下site-packages下,以文件或者目录的形式存放
py3study
2020/01/10
3600
Python基础13-模块的使用
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
4100
Python基础13-模块的使用
相关推荐
【python可视化】python编码规范、标准库与扩展库对象的导入与使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验