LeetCode刷题--- 单词搜索

个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客

个人专栏

力扣递归算法题

 http://t.csdnimg.cn/yUl2I

【C++】    

​​​​​​http://t.csdnimg.cn/6AbpV

数据结构与算法

 ​​​​http://t.csdnimg.cn/hKh2l


前言:这个专栏主要讲述递归递归、搜索与回溯剪枝算法,所以下面题目主要也是这些算法做的  

我讲述题目会把讲解部分分为3个部分:
1、题目解析

2、算法原理思路讲解

3、代码实现


单词搜索

题目链接:单词搜索

题目

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 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 == board.length
  • n = board[i].length
  • 1 <= m, n <= 6
  • 1 <= word.length <= 15
  • board 和 word 仅由大小写英文字母组成

解法

题目解析

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

算法原理思路讲解

我们需要假设每个位置的元素作为第⼀个字⺟,然后向相邻的四个⽅向进⾏递归,并且不能出现重复使⽤同⼀个位置的元素。通过深度优先搜索的⽅式,不断地枚举相邻元素作为下⼀个字⺟出现的可能性,并在递归结束时回溯,直到枚举完所有可能性,得到正确的结果。
一、画出决策树

 


二、设计代码

(1)全局变量

string Word;
bool visit[10][16];
int dx[4] = { 0, 0, -1, 1 };
int dy[4] = { 1, -1, 0, 0 };
  • Word(word的值)
  • visit(二位数组中的元素是否被用过)
  • dx[4](用于计算)
  • dy[4](用于计算)

(2)设计递归函数

bool dfs(vector<vector<char>>& board, int row, int col, int pos);
  • 参数:row(当前需要进⾏处理的元素横坐标),col(当前需要进⾏处理的元素横坐标),pos(当前已经处理的元素个数);
  • 返回值:布尔值 ;
  • 函数作用:判断当前坐标的元素作为字符串中下标 step 的元素出现时,向四个⽅向传递,查找是否存在路径结果与字符串相同。

递归过程

  1. 遍历每个位置,标记当前位置并将当前位置的字⺟作为⾸字⺟进⾏递归,并且在回溯时撤回标记。
    1. 在每个递归的状态中,我们维护⼀个步数 pos,表⽰当前已经处理了⼏个字⺟。
    2. 若当前位置的字⺟与字符串中的第 pos 个字⺟不相等,则返回 false。
    3. 若当前 pos 的值与字符串⻓度相等,表⽰存在⼀种路径使得 word 成⽴,返回 true。
  2. 对当前位置的上下左右四个相邻位置进⾏递归,若递归结果为 true,则返回 true。
  3. 若相邻的四个位置的递归结果都为 false,则返回 false。
特别地,如果使⽤将当前遍历到的字符赋值为空格,并在回溯时恢复为原来的字⺟的⽅法,则在递归时不会重复遍历当前元素,可达到不使⽤标记数组的⽬的。

代码实现

class Solution {
public:
string Word;
bool visit[10][16];
int dx[4] = { 0, 0, -1, 1 };
int dy[4] = { 1, -1, 0, 0 };bool dfs(vector<vector<char>>& board, int row, int col, int pos){if (pos == Word.size()){return true;}int m = board.size();int n = board[0].size();for (int i = 0 ; i < 4; i++){ int x = row + dx[i], y = col + dy[i];if (x >= 0 && x < m && y >= 0 && y < n && !visit[x][y] && board[x][y]== Word[pos]){visit[x][y] = true;if (dfs(board, x, y,pos + 1)) return true;visit[x][y] = false;}}return false;}bool exist(vector<vector<char>>& board, string word) {Word = word;for (int i = 0; i < board.size(); i++){for (int j = 0; j < board[i].size(); j++){if (board[i][j] == word[0]){visit[i][j] = true;if (dfs(board, i, j, 1) == true)return true;visit[i][j] = false;;}}}return false;}
};

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

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

相关文章

LLM之RAG实战(十一)| 使用Mistral-7B和Langchain搭建基于PDF文件的聊天机器人

在本文中&#xff0c;使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序&#xff0c;可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few-…

CENTOS docker拉取私服镜像

概述 docker的应用越来越多&#xff0c;安装部署越来越方便&#xff0c;批量自动化的镜像生成和发布都需要docker镜像的拉取。 centos6版本太老&#xff0c;docker的使用过程中问题较多&#xff0c;centos7相对简单容易。 本文档主要介绍centos系统安装docker和拉取docker私…

一文了解无线通信 - NB-IOT、LoRa

NB-IOT、LoRa 目录概述需求&#xff1a; 设计思路实现思路分析 NB-IOT1.LoRa2.区别 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,chall…

奇偶公式推导

推导前提: 基函数: f ( x ) − f ( − x ) f(x)-f(-x) f(x)−f(−x)偶函数: f ( x ) f ( − x ) f(x)f(-x) f(x)f(−x) 1. 奇函数 ∗ 奇函数 偶函数 奇函数*奇函数偶函数 奇函数∗奇函数偶函数 f 1 ( x ) ∗ f 2 ( x ) f_1(x)*f_2(x) f1​(x)∗f2​(x) − f 1 ( x ) ∗ …

[sparkSQL] Shuffle

在Spark SQL中&#xff0c;Shuffle 是指将数据重新分布到不同的节点上以进行处理的操作。在 Spark SQL 中&#xff0c;以下是一些可能触发 Shuffle 的操作或代码&#xff1a; group by 和 aggregations&#xff1a; 当使用 GROUP BY 或聚合函数&#xff08;如 SUM、AVG&#xf…

istio 虚拟服务 yaml 解释

虚拟服务 virtualservice 可以类比 k8s service 管理 pod&#xff0c; vs 是管理 svc 的 vs 对 svc 定义了流量规则&#xff0c;将满足条件的流量转发到对应的服务后端 配置定义 hosts&#xff1a;流量发送的目标 在 k8s 中&#xff0c;hosts 一般是 servic 的短域名&#x…

简单了解SQL堆叠注入与二次注入(基于sqllabs演示)

1、堆叠注入 使用分号 ; 成堆的执行sql语句 以sqllabs-less-38为例 ?id1 简单测试发现闭合点为单引号 ?id1 order by 3 ?id1 order by 4使用order by探测发现只有三列&#xff08;字段数&#xff09; 尝试简单的联合注入查询 ?id-1 union select 1,database(),user()-…

开放网络+私有云=?星融元的私有云承载网络解决方案实例

在全世界范围内的云服务市场上&#xff0c;开放网络一直是一个备受关注的话题。相比于传统供应商的网络设备&#xff0c;开放网络具备软硬件解耦、云原生、可选组件丰富等优势&#xff0c;对云服务商和超大型企业有足够的吸引力。 SONiC作为开源的网络操作系统&#xff0c;使得…

Debian12升级openssh-9.6p1

下载openssh-9.6p1 https://www.openssh.com/ftp.html tar xvf openssh-9.6p1.tar.gz安装编译器和依赖库 apt-get install gcc apt-get install zlib1g-dev apt-get install libssl-dev apt-get install make编译 ./configure make 安装 make install为了使现在版本生效卸…

uni-app uni-app内置组件

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

机器学习之主成分分析(Principal Component Analysis,PCA)案例解析附代码

概念 主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,用于减少数据集维度并保留数据集中的主要特征。它通过线性变换将高维数据投影到低维空间,同时尽量保留数据集中的信息。 PCA的目标是找到数据中最重要的方向,即方差最大的方向,这些方向被称为…

【JS笔记】JavaScript语法 《基础+重点》 知识内容,快速上手(二)

数组 什么是数组&#xff1f; 字面理解就是 数字的组合 其实不太准确&#xff0c;准确的来说数组是一个 数据的集合 也就是我们把一些数据放在一个盒子里面&#xff0c;按照顺序排好 [1, 2, 3, hello, true, false]这个东西就是一个数组&#xff0c;存储着一些数据的集合 …

python测试工具: 实现数据源自动核对

测试业务需要&#xff1a; 现有A系统作为下游数据系统&#xff0c;上游系统有A1,A2,A3... 需要将A1,A2,A3...的数据达到某条件后&#xff08;比如&#xff1a;A1系统销售单提交出库成功&#xff09;自动触发MQ然后再经过数据清洗落到A系统&#xff0c;并将清洗后数据通过特定…

css 用多个阴影做出光斑投影的效果 box-shadow

css 用多个阴影做出光斑投影的效果 box-shadow 你首先需要知道的一点是 box-shadow 可以接收多个值&#xff0c;也就是可以设置多个阴影&#xff0c;这样就可以做一个类似光斑投影的效果。 一、效果 二、代码 里面用到了我一些 scss 工具方法&#xff0c;不过不影响&#xf…

Linux升级指南:保持系统安全和高效运行

Linux系统的升级是确保系统稳定和安全性的重要步骤。本文将介绍Linux系统升级的基本概念&#xff0c;以及具体的操作步骤和注意事项&#xff0c;以帮助用户顺利升级他们的Linux系统。 Linux操作系统以其稳定性和可定制性而闻名&#xff0c;它经常通过升级来提供新的功能、修复漏…

在使用tcp长连接时,是否还需要再引入重发机制?

一 什么是tcp长连接&#xff1f; 在TCP&#xff08;Transmission Control Protocol&#xff09;中&#xff0c;长连接是指在通信过程中保持连接状态的一种方式&#xff0c;相对于短连接而言。长连接通常用于需要频繁通信的场景&#xff0c;以减少连接建立和断开的开销。在长连接…

Java解决正整数和负整数的最大计数

Java解决正整数和负整数的最大计数 01 题目 给你一个按 非递减顺序 排列的数组 nums &#xff0c;返回正整数数目和负整数数目中的最大值。 换句话讲&#xff0c;如果 nums 中正整数的数目是 pos &#xff0c;而负整数的数目是 neg &#xff0c;返回 pos 和 neg二者中的最大…

秒杀系统的设计思路(应对高并发,超卖等问题的解决思路)

首先我们先看一下设计秒杀系统时&#xff0c;我们应该考虑的问题。 解决方案&#xff1a; 一.页面静态化结合CDN内容分发 前端把能提前放入cdn服务器的东西都放进去&#xff0c;反正把所有能提升效率的步骤都做一下&#xff0c;减少真正秒杀时候服务器的压力。 秒杀活动的页面…

达达快送无代码API:电商平台广告推广与客服系统一体化

快速实现高效对接&#xff1a;无代码开发的集成优势 在电商行业竞争日益激烈的现状下&#xff0c;快速对接高效的即时配送服务已成为企业取胜的关键。无代码开发为电商平台与达达快送之间的连接提供了便利&#xff0c;无需深入编程知识&#xff0c;企业即可通过图形化界面轻松…

九州金榜|家庭教育中如何培养优秀的孩子

家庭是孩子心中最大的底气&#xff0c;而家庭的形态也就构成孩子未来的模样。所以给为孩子提供最好的教育&#xff0c;就是为孩子创建一个学习气氛浓厚&#xff0c;成员关系美满的家庭&#xff0c;它会成孩子成长道路上最大的助力&#xff0c;最温暖的港湾。 北京大学校长蔡元培…