LeetCode 79. 单词搜索

news2025/1/17 3:58:38

LeetCode 79. 单词搜索

难度: m i d d l e \color{orange}{middle} middle


题目描述

给定一个 m x n m x n mxn 二维字符网格 b o a r d board board 和一个字符串单词 w o r d word word 。如果 w o r d word word 存在于网格中,返回 t r u e true true ;否则,返回 f a l s e false false

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例 1:

在这里插入图片描述

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true

示例 2:

在这里插入图片描述

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
输出:true

示例 3:

在这里插入图片描述

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
输出:false

提示:

  • m = = b o a r d . l e n g t h m == board.length m==board.length
  • n = b o a r d [ i ] . l e n g t h n = board[i].length n=board[i].length
  • 1 < = m , n < = 6 1 <= m, n <= 6 1<=m,n<=6
  • 1 < = w o r d . l e n g t h < = 15 1 <= word.length <= 15 1<=word.length<=15
  • b o a r d board board w o r d word word 仅由大小写英文字母组成

进阶: 你可以使用搜索剪枝的技术来优化解决方案,使其在 b o a r d board board 更大的情况下可以更快解决问题?


算法

(递归)

在深度优先搜索中,最重要的就是考虑好搜索顺序。

我们先枚举单词的起点,然后依次枚举单词的每个字母。
过程中需要将已经使用过的字母改成一个特殊字母,以避免重复使用字符。

复杂度分析

  • 时间复杂度 O ( n 2 3 k ) O(n^2 3^k) O(n23k),单词起点一共有 n 2 n^2 n2 个,单词的每个字母一共有上下左右四个方向可以选择,但由于不能走回头路,所以除了单词首字母外,仅有三种选择。所以总时间复杂度是 O ( n 2 3 k ) O(n^2 3^k) O(n23k)

  • 空间复杂度 : O ( n ) O(n) O(n)

C++ 代码

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        for (int i = 0; i < board.size(); i ++) {
            for (int j = 0; j < board[0].size(); j ++) {
                if (dfs(board, word, 0, i, j)) return true;
            }
        }
        return false;
    }

    int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};

    bool dfs(vector<vector<char>>& board, string& word, int u, int x, int y) {
        if (board[x][y] != word[u]) return false;
        if (u == word.size() - 1) return true;

        char t = board[x][y];
        board[x][y] = '.';
        for (int i = 0; i < 4; i ++) {
            int a = x + dx[i], b = y + dy[i];
            if (a < 0 || a >= board.size() || b < 0 || b >= board[0].size() || board[a][b] == '.')
                continue;
            if (dfs(board, word, u + 1, a, b)) return true;
        }
        board[x][y] = t;

        return false;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378794.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3月来了,给自己做一个简单的nodejs后端技术总结

3月来了,给自己做一个简单的nodejs后端技术总结 3月来了,给自己做一个简单的nodejs后端技术总结 完全重构 数据库切换迁移Why Nestjs?prisma or typeorm?serverless 函数辅助GraphQLGithub Action CI/CD部署 tensorflow 模型 我又滚回来写文章了&#xff0c;从去年11月底…

用canvas画一个炫酷的粒子动画倒计时

前言 &#x1f606; 这是一篇踩在活动尾声的文章&#xff0c;主要是之前在摸鱼社群里有人发了个粒子动画的特效视频&#xff0c;想着研究研究写一篇文章出来看看&#xff0c;结果这一下子就研究了半个多月。 &#x1f602; 下面就把研究成果通过文字的形式展现出来吧&#xf…

Compact 调优实例

1.问题描述 10月27号&#xff0c;用户反馈 g_feature 资源组的回溯任务在夜间的耗时比较大。在00:49——04:16期间&#xff0c;查询的平均耗时是大于100ms的。 2. 分析原因 根据问题现象&#xff0c;在夜间的耗时比较大&#xff0c;白天的耗时比较小&#xff0c;首先想到的就…

【电子通识】为什么产品出厂前要进行高温老化?

产品在出厂时往往会进行高温老化测试&#xff0c;那出厂前高温老化的目的是什么&#xff1f;可靠性定义首先我们要知道产品的可靠性&#xff0c;可靠性的定义是指产品在规定的条件下能够正常运行达到产品寿命的概率。如下公式表示&#xff0c;其中&#xff0c;λ表示固有故障率…

一起了解井用污水采样器——让井下污水采样更人性化

井用采样器的工作环境比较特殊。比如&#xff1a;雨水管网、窨井、污水井、排污口、下水道&#xff0c;海洋、河流、沟渠等恶劣狭小的环境。这就要求采样设备小巧灵活&#xff0c;方便环境检测执法检查人员在排污井、检查井、雨水管网等特殊环境中进行水质采样。 **井用采样器主…

二叉树路径查找

题目描述&#xff1a;给定一棵二叉树(结构如下)&#xff0c;其中每个节点值为整数。给定一个值 K&#xff0c;求所有满足如下条件的路径并将路径上节点的值打印出来&#xff1a; 1、路径方向必须向下&#xff0c;即只能从父节点指向子节点 2、路径并不是必须从根节点开始或在叶…

21- 神经网络模型_超参数搜索 (TensorFlow系列) (深度学习)

知识要点 fetch_california_housing&#xff1a;加利福尼亚的房价数据&#xff0c;总计20640个样本&#xff0c;每个样本8个属性表示&#xff0c;以及房价作为target 超参数搜索的方式: 网格搜索, 随机搜索, 遗传算法搜索, 启发式搜索 函数式添加神经网络: model.add(keras.l…

Python可视化界面编程入门

Python可视化界面编程入门具体实现代码如所示&#xff1a; &#xff08;1&#xff09;普通可视化界面编程代码入门&#xff1a; import sys from PyQt5.QtWidgets import QWidget,QApplication #导入两个类来进行程序界面编程if __name__"__main__":#创建一个Appl…

探索ChatGPT背后的网络基础设施

ChatGPT是OpenAI公司开发的一款聊天机器人应用&#xff0c;自2022年11月推出以来以迅雷不及掩耳盗铃之势火爆全球。ChatGPT不仅可以模仿人类对话&#xff0c;还可以创建音乐、电视剧、童话故事和学生论文&#xff0c;甚至是编写和调试计算机程序。 截至2023年1月&#xff0c;C…

如何打造自己的小程序生态?

2021 年全网小程序数量就已超 700 万&#xff0c;从微信开始&#xff0c;到其他各大平台&#xff0c;如抖音、支付宝&#xff0c;小程序发展迅猛&#xff0c;2023年小程序仍有着巨大的发展潜力。 现在。人们逐渐发现&#xff0c;日常的生活、出行、购物各个方面都越来越离不开…

CAN工具-VSpy(ValueCAN) - Panel面板

在介绍CANoe工具的时候&#xff0c;有介绍过Panel面板的使用&#xff0c;同样&#xff0c;在VSpy软件工具中&#xff0c;也有同类型的工具可供使用 - Graphical Panels&#xff0c;同样也能提供一个控制面板&#xff0c;然后我们通过连接信号实现不同的控件&#xff0c;已达到我…

极验4参数分析

目标链接 aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v接口分析 开发者人员工具进行抓包&#xff0c;刷新页面&#xff0c;抓到了一个名为 load?captcha_idxxx 的包&#xff0c;Query String Parameters 包含了一些参数 captcha_id&#xff1a;验证码 id&#xff0c;固定值&#xff0c…

如何使用AzureGraph通过Microsoft Graph收集Azure活动目录信息

关于AzureGraph AzureGraph是一款针对Azure活动目录的信息收集工具&#xff0c;该工具基于Microsoft Graph实现其功能。多亏了Microsoft Graph技术&#xff0c;AzureGraph才能从Azure活动目录获取各种信息&#xff0c;如用户、设备、应用程序、域等。 此应用程序允许我们通过…

一次性搞定 `SHOW SLAVE STATUS` 的解读

一次性搞定 SHOW SLAVE STATUS 的解读 解析日志文件的位置 诚然, GTID(全局事务标识符)已经在 MySQL 5.6中得到支持, 此外,还可以通过 Tungsten replicator 软件来实现(2009年以后一直有谷歌在维护,不是吗?)。 但有一部分人还在使用MySQL 5.5的标准副本方式, 那么这些二进制日…

20道经典自动化测试面试题

概述 觉得自动化测试很难&#xff1f; 是的&#xff0c;它确实不简单。但是学会它&#xff0c;工资高啊&#xff01; 担心面试的时候被问到自动化测试&#xff1f; 嗯&#xff0c;你担心的没错&#xff01;确实会被经常问到&#xff01; 现在应聘软件测试工程师的岗位&…

前端经典react面试题及答案

为什么 React 元素有一个 $$typeof 属性 目的是为了防止 XSS 攻击。因为 Synbol 无法被序列化&#xff0c;所以 React 可以通过有没有 $$typeof 属性来断出当前的 element 对象是从数据库来的还是自己生成的。 如果没有 $$typeof 这个属性&#xff0c;react 会拒绝处理该元素。…

docker搭建redis集群模式

目录docker 安装redis1.创建redis.conf开启redis验证(开启密码)允许redis外地连接后台启动开启redis持久化2.启动redis容器3.进入容器redis集群3主3从1.新建6个redis容器2.构建主从关系3.查询集群信息4.主从扩容5.主从缩容docker 安装redis 1.创建redis.conf 开启redis验证(开…

第四阶段-12关于Spring Security框架,RBAC,密码加密原则

关于csmall-passport项目 此项目主要用于实现“管理员”账号的后台管理功能&#xff0c;主要实现&#xff1a; 管理员登录添加管理员删除管理员显示管理员列表启用 / 禁用管理员 关于RBAC RBAC&#xff1a;Role-Based Access Control&#xff0c;基于角色的访问控制 在涉及…

Feign Ribbon Hystrix 三者关系

在微服务架构的应用中&#xff0c; Feign、Hystrix&#xff0c;Ribbon 三者都是必不可少的&#xff0c;可以说已经成为铁三角。 Feign 介绍 Feign 是一款Java语言编写的 HttpClient 绑定器&#xff0c;在 Spring Cloud 微服务中用于实现微服务之间的声明式调用。Feign 可以定…

IIC子系统

文章目录引言一、I2C 总线驱动框架二、I2C驱动框图(重点)三、I2C 子系统软件框架3.1 I2C子系统的4个关键结构体3.2 I2C总线与平台总线的结合3.3 在设备树信息添加i2c从设备3.4 新增加i2c从设备四、i2c driver驱动的编写4.1 陀螺仪和加速度工作原理4.2 mpu6050的寄存器信息和设置…