【LeetCode热题100】79. 单词搜索(回溯)

一.题目要求

给定一个 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 仅由大小写英文字母组成

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

四.解题思路

存不存在问题最好用bool型递归,不然时间差很多

五.代码实现

用void返回,找到了也会继续递归判断完所有条件

class Solution {
public:bool exist(vector<vector<char>>& board, string word) {string path;vector<vector<bool>> used(board.size(), vector<bool>(board[0].size()));for (int i = 0; i < board.size(); i++) {for (int j = 0; j < board[0].size(); j++) {dfs(board, word, used, i, j, 0);if (finded)return true;}}return finded;}void dfs(vector<vector<char>>& board, string word,vector<vector<bool>>& used, int x, int y, int step) {if (finded)return;if (word.size() == step) {finded = true;return;}if (x >= board.size() || x < 0)return;if (y >= board[0].size() || y < 0)return;if (used[x][y])return;if (word[step] != board[x][y])return;step++;used[x][y] = true;dfs(board, word, used, x - 1, y, step);dfs(board, word, used, x, y + 1, step);dfs(board, word, used, x + 1, y, step);dfs(board, word, used, x, y - 1, step);used[x][y] = false;}private:bool finded = false;
};

在这里插入图片描述
bool型,只要找到一种满足的就直接终止后续递归

class Solution {
public:bool exist(vector<vector<char>>& board, string word) {string path;vector<vector<bool>> used(board.size(), vector<bool>(board[0].size()));for (int i = 0; i < board.size(); i++) {for (int j = 0; j < board[0].size(); j++) {if (dfs(board, word, used, i, j, 0))return true;}}return false;}bool dfs(vector<vector<char>>& board, string& word,vector<vector<bool>>& used, int x, int y, int step) {if (word.size() == step) return true;if (x >= board.size() || x < 0 || y >= board[0].size() || y < 0 || used[x][y] || word[step] != board[x][y])return false;step++;used[x][y] = true;bool result = dfs(board, word, used, x - 1, y, step) || dfs(board, word, used, x, y + 1, step) || dfs(board, word, used, x + 1, y, step) || dfs(board, word, used, x, y - 1, step);used[x][y] = false;return result;}};

在这里插入图片描述

六.题目总结

1.能传引用传引用
2.二维数组初始化:vector<vector> used(board.size(), vector(board[0].size()));
3.

for (int i = 0; i < board.size() && !found; i++) {for (int j = 0; j < board[0].size() && !found; j++) {dfs(board, word, used, i, j, 0);}
}

保证了每个点都可作为起始点

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

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

相关文章

VsCode正确解决vue3+Eslint+prettier+Vetur的配置冲突

手把手教你VsCode正确解决vue3EslintprettierVetur的配置冲突 VsCode正确解决vue3EslintprettierVetur的配置冲突Eslint文档查看和修改规则&#xff1a;step1&#xff1a;首先快速浏览下规则简要setp2: ctrlF 搜索你要配置规则的英文名&#xff0c;例如attributesetp3: 修改配置…

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现&#xff1a; 交通运输作为国民经济的载体&#xff0c;沟通生产和消费&#xff0c;在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系&#xff0c;生产水平越高…

LangSmith

文章目录 关于 LangSmith创建 API Key 基本代码使用查看控制台 关于 LangSmith 主页&#xff1a;https://www.langchain.com/langsmith文档&#xff1a;https://docs.smith.langchain.com/LangSmith Walkthrough &#xff1a; https://python.langchain.com/docs/langsmith/wa…

用于自动驾驶,无人驾驶领域的IMU六轴陀螺仪传感器:M-G370

用于自动驾驶,无人驾驶的IMU惯导模块六轴陀螺仪传感器:M-G370。自2020年&#xff0c;自动驾驶,无人驾驶已经迎来新突破&#xff0c;自动驾驶汽车作为道路交通体系的一员&#xff0c;要能做到的就是先判断周边是否有障碍物&#xff0c;自身的行驶是否会对其他交通参与成员产生危…

Java内存模型(JMM)-as-if-serial

Java内存模型&#xff08;JMM&#xff09;-as-if-serial Java内存模型&#xff08;Java Memory Model&#xff0c;JMM&#xff09;是一种规范&#xff0c;定义了Java程序在多线程环境中的内存访问行为。JMM描述了线程之间如何协同工作以及如何通过内存进行通信。 "as-if-s…

YOLOV5 改进:更换主干网络为Resnet

1、前言 之前实现了yolov5更换主干网络为MobileNet和vgg网络 本章将继续将yolov5代码进行更改,通过引用官方实现的resnet网络,替换原有的yolov5主干网络 替换的效果如下: 2、resnet 网络结构 测试的代码为官方的resnet34 通过summary 打印的resnet网络结构如下 =======…

京东商品信息采集API商品详情图主图价格抓取接口(测试入口如下)

京东商品信息采集API通常用于抓取京东平台上的商品信息&#xff0c;包括商品详情图、主图、价格等。这样的API通常由专业的数据服务提供商提供&#xff0c;并且需要遵循京东的开放平台政策和相关法规。 请求示例&#xff0c;API接口接入Anzexi58 关于你提到的“测试入口”&…

[蓝桥杯练习]蓝桥王国

单源最短路径问题-dj #include<bits/stdc.h> #define ll long long using namespace std; const int N3e55,M1e65; const ll INF0x7f7f7f7f7f7f7f;//7个7f没问题,INF < INFx struct edge{int to;ll w;edge(int end,ll cost){toend;wcost;} }; struct node{int id;l…

Flutter应用混淆技术原理与实践

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

pycharm复习

目录 1.基础语法 2.判断语句 3.while循环 4.函数 5.数据容器 1.基础语法 1.字面量 2.注释&#xff1a; 单行注释# 多行注释" " " " " " 3.变量&#xff1a; 变量名 变量值 print&#xff1a;输出多个结果&#x…

React 掌握及对比常用的8个Hooks,优化及使用场景

1、useState 在函数组件中&#xff0c;可以使用useState来定义函数组件的状态。使用useState来创建状态。 1.引入2.接收一个参数作为初始值3.返回一个数组&#xff0c;第一个值为状态&#xff0c;第二个值为改变状态的函数 2、 useEffect useEffect又称副作用hooks。作用&…

JVM 记录

记录 工具 https://gceasy.io 资料 尚硅谷宋红康JVM全套教程&#xff08;详解java虚拟机&#xff09; https://www.bilibili.com/video/BV1PJ411n7xZ?p361 全套课程分为《内存与垃圾回收篇》《字节码与类的加载篇》《性能监控与调优篇》三个篇章。 上篇《内存与垃圾回收篇…

JavaScript 对象管家 Proxy

JavaScript 在 ES6 中&#xff0c;引入了一个新的对象类型 Proxy&#xff0c;它可以用来代理另一个对象&#xff0c;并可以在代理过程中拦截、覆盖和定制对象的操作。Proxy 对象封装另一个对象并充当中间人&#xff0c;其提供了一个捕捉器函数&#xff0c;可以在代理对象上拦截…

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控 背景 用python开发的应用程序在服务器上运行,有时候会出现程序自动退出却收不到告警的情况 环境 zabbix服务器:Centos7 64位 Windows服务器: Windows 10 64位 软件 zabbix_server:zabbix5.0 zabbix_…

680.验证回文串II-力扣

680.验证回文串II-力扣 给你一个字符串 s&#xff0c;最多可以从中删除一个字符。 请你判断 s 是否能成为回文字符串&#xff1a;如果能&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false。 示例1&#xff1a; 输入&#xff1a;s “aba” 输出&#xff1a;true示…

如何制作一个微信小程序商城?

在这个数字化飞速发展的时代&#xff0c;微信小程序商城以其独特的便捷性和高效的用户连接能力&#xff0c;成为了电商领域的一颗新星。对于那些渴望在微信平台上开展业务的商家和企业来说&#xff0c;微信小程序商城不仅是一种新的尝试&#xff0c;更是一个充满无限可能的商机…

2024年文化传播、交流与考古学国际会议 (CCEA 2024)

2024年文化传播、交流与考古学国际会议 (CCEA 2024) 2024 International Conference on Cultural Communication, Exchange, and Archaeology 【会议简介】 2024年文化传播、交流与考古学国际会议即将在千年古都西安盛大召开。本次会议将汇聚全球文化、传播、考古等领域的专家…

ORCLE函数学习方法

1.字符串小代码转化为字符串值 如 (10,20)==》 (现金(电汇),银行承兑汇票,现金(电汇)) CREATE OR REPLACE FUNCTION FROM_ARRAYSTR_TO_STR(P1 in varchar2,P2 in varchar2) return varchar2 is VLA varchar2(2048):=;--最后函数返回的值 TEMP varchar2(20); --截取…

优化Zabbix系统实现性能提升(详细操作指引)

一、数据库优化 1. 将 MySQL 数据库升级到最新版本 操作步骤: 查看当前版本:mysql -V 升级到最新版本:yum install mysql-server -y 2. 调整 MySQL 数据库参数 以下是一些重要的参数及其建议值: innodb_buffer_pool_size:用于存储 InnoDB 引擎的数据缓存,建议设置为系…

每日一题(leetcode2952):添加硬币最小数量 初识贪心算法

这道题如果整体去思考&#xff0c;情况会比较复杂。因此我们考虑使用贪心算法。 1 我们可以假定一个X&#xff0c;认为[1,X-1]区间的金额都可以取到&#xff0c;不断去扩张X直到大于target。&#xff08;这里为什么要用[1,X-1]而不是[1,X],总的来说是方便&#xff0c;潜在思想…