HOT60-单词搜索

news2024/11/22 23:37:22

        leetcode原题链接:单词搜索

题目描述

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

解题方法:回溯。用backtrack(board, x, y, word, i, visited)表示是否存在以board[x][y]为开始节点,能找到单词word,为了防止重复兜圈查找,用visited变量保存标记当前已经访问的位置。

核心逻辑如下:

1)visited[x][y]=true,比较board[x][y]是否等于word[i],不相等直接返回false;

2)   如果board[x][y]等于word[i],则继续向上、下、左、右四个方向继续搜索word[i+1];

3)结果为: result(上) || result(下) || result(左) || result(右)

4)visited[x][y]=false 恢复状态

C++代码

#include <iostream>
#include <vector>
#include <string>

class Solution {
public:
    bool exist(std::vector<std::vector<char>>& board, std::string word) {
        int rnum = board.size();
        int cnum = board[0].size();
        std::vector<std::vector<bool>> visited(rnum, std::vector<bool>(cnum, false));
        
        for (int x = 0; x < rnum; x++) {
            for (int y = 0; y < cnum; y++) {
                if (backtrack(board, x, y, word, 0, visited)) { //以(x,y)为开始节点去搜索
                    return true;
                }
            }
        }
        return false;
    }

    //判断以board(x,y)为起点是否能找到word
    bool backtrack(std::vector<std::vector<char>>& board, int x, int y, 
                   std::string word, int i, std::vector<std::vector<bool>>& visited) {
        int rnum = board.size();
        int cnum = board[0].size();
        int word_n = word.size();
        if (i == word_n) {
            return true;
        }
        if (x < 0 || x >= rnum || y < 0 || y >= cnum) {
             return false;
        }
        if (visited[x][y]) {//已经访问过,直接返回
            return false;
        }
        if (board[x][y] != word[i]) { //首字母不同,直接返回
            return false;
        }
        visited[x][y] = true;//标记为访问
        bool result = false;
        result = backtrack(board, x - 1, y, word, i + 1, visited) || //向上查找
                 backtrack(board, x + 1, y, word, i + 1, visited) || //向上
                 backtrack(board, x, y - 1, word, i + 1, visited) || //向左
                 backtrack(board, x, y + 1, word, i + 1, visited);   //向右
        visited[x][y] = false;
        return result;
    }
};

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

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

相关文章

分体式骨传导,为敏感耳朵打造的舒适体验,南卡OE上手

骨传导蓝牙耳机这两年很受运动玩家的欢迎&#xff0c;不过标准的骨传导耳机用起来并不算方便&#xff0c;最近我看到南卡新推出一种分体式骨传导耳机&#xff0c;叫南卡OE&#xff0c;和普通的骨传导耳机有很大不同。上周我也入手了一款&#xff0c;这几天试了试&#xff0c;感…

基于YOLOv8开发构建目标检测模型超详细教程【以焊缝质量检测数据场景为例】

超详细教程系列在我前面的文章中也有不少的实践记录&#xff0c;感兴趣的话可以自行阅读即可&#xff1a; 《基于yolov7开发实践实例分割模型超详细教程》 《YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程》 《基于yolov5-v7.0开发实践实例分割模型超详细…

实现java参数非必传

1、路径参数&#xff1a; PathVariable(required false)实现参数aaa非必传 2、非路径参数&#xff1a; RequestParam(required false) 实现参数aaa非必传 3、实体参数&#xff1a; RequestBody(required false&#xff09;实现实体aaa非必传

Java基础---集合类

目录 典型回答 Collection和Collections有什么区别 Java中的Collection如何遍历迭代 Iterable和Iterator如何使用 为什么不把Iterable和Iterator合成一个使用 哪些集合类是线程安全的 典型回答 什么是集合 集合就是一个放数据的容器&#xff0c;准确的说是放数据对象引用…

32位ARM M0+内核单片机 XL32F001简单介绍,Flash 24K,SRAM 3K

XL32F001 系列微控制器采用高性能的 32 位 ARM Cortex-M0内核&#xff0c;宽电压工作范围的 MCU。嵌入 24Kbytes Flash 和 3Kbytes SRAM 存储器&#xff0c;最高工作频率 24MHz。包含多种不同封装类型多款产品。芯片集成 I2C、SPI、USART 等通讯外设&#xff0c;1 路 12bit ADC…

十六、flex应用练习做淘宝按钮界面

目录&#xff1a; 目标小技巧实现最终代码 一、目标&#xff1a;我们要做一个手机版本的淘宝网&#xff0c;蓝色框住的按钮这部分。 二、 小技巧&#xff1a;如何在网页上看手机版本的页面 首先在网页上打开淘宝网&#xff0c;然后按F12&#xff0c;进入调试状态&#xff1b;&…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(一):为什么要关注损耗?

一个具有极快上升沿的信号输入到真实传输线中&#xff0c;在从传输线输出的时候上升时间会很长。例如&#xff0c;一个上升时间为50ps的信号&#xff0c;在经过一段36inch长&#xff0c;50Ohm传输线后&#xff0c;上升时间增加到1ns。上升时间的退化是由于传输线的损耗&#xf…

C#使用跨平台的PdfSharpCore开源库生成PDF文件

一、需求说明 在进行项目开发中,需要将C#程序的一些文本内容导出为PDF文件(能够根据文本自动分行分页),并且要求这个生成PDF文件的程序是可跨平台的;实现类似效果: 二、需求分析 ①将程序的文本内容导出为PDF文件; ②能够将文本内容自动分行分页【且可添加页眉、页脚、…

记录一次nginx日志偶现502报错排查

背景 之前的业务链路 负载均衡–>nginx–>cvm&#xff08;业务后端node&#xff09; 上云后链路 负载均衡–>nginx–>pod&#xff08;业务后端node&#xff09; 上云后nginx日志隔几个小时就出现一波502&#xff0c;查看nginx的日志有两个特征&#xff0c;就是re…

C# Linq 详解二

目录 概述 七、OrderBy 八、OrderByDescending 九、Skip 十、Take 十一、Any 十二、All 概述 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串&#xff0c;没有编译时类型检查或 IntelliSense 支持。 此外&a…

matlab中画有重影的机器人运动过程【给另一个机器人设置透明度】

1、前言如题 2、参考连接如下 How to plot two moving robot in the same figure and change one of them transparency&#xff1f; - MATLAB Answers - MATLAB Central (mathworks.cn)3、代码&#xff1a;【找到figure中对应对象并设置属性】 % Create two instances of a…

【OJ比赛日历】快周末了,不来一场比赛吗? #07.15-07.21 #7场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-07-15&#xff08;周六&#xff09; #3场比赛2023-07-16…

【多线程初阶】Thread类常见方法以及线程的状态

多线程初阶系列目录 持续更新中 1.第一次认识线程 2.Thread类常见方法以及线程的状态 … 文章目录 多线程初阶系列目录前言1. Thread 类及常见方法1.1 常见构造方法1.2 常见属性1.3 重要方法1.3.1 启动一个线程 ---- start()1.3.2 中断一个线程 ---- interrupt()1.3.3 等待一…

有PMP有没有必要换cspm?未来的发展前景如何?

最近 CSPM 证书很热门&#xff0c;CSPM 相关问题大家都很关心&#xff0c;今天本橘座就给大家全面解答一下 CSPM到底是何方神圣&#xff1f; 文章主要是解答下面几个常见问题&#xff0c;其他问题可以留言或者私信咨询我哦~ 一、什么是 CSPM证书&#xff1f;跟PMP是什么关系&a…

启动、关闭nacos

下载 进入官网 http://nacos.io/zh-cn/ 页面打开后&#xff0c;点击【前往Github】 进入Github页面&#xff0c;往下拖动&#xff0c;找到 latest stable release 选择当时最新的版本下载即可&#xff0c;这里选择.zip的文件下载 安装 Nacos 是免安装的&#xff0c;我们下…

备战秋招008(20230713)

文章目录 前言一、今天学习了什么&#xff1f;二、关于问题的答案1.集合2.JUC02、底层原理03、内存泄漏 总结 前言 提示&#xff1a;这里为每天自己的学习内容心情总结&#xff1b; Learn By Doing&#xff0c;Now or Never&#xff0c;Writing is organized thinking. 目前…

python - leetcode - 64. 最小路径和【经典题解 - 矩阵数组动态规划】

一. 题目&#xff1a;64. 最小路径和 描述&#xff1a; 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#…

【SpringBoot3】--02.Web开发

文章目录 SpringBoot3-Web开发0.WebMvcAutoConfiguration原理1.生效条件2.效果3.WebMvcConfigurer接口4. 静态资源规则源码5. EnableWebMvcConfiguration 源码6. 为什么容器中放一个WebMvcConfigurer就能配置底层行为7. WebMvcConfigurationSupport 1.Web场景1.1自动配置1.2默认…

51单片机-串口通信(串口向电脑发送信息电脑通过串口控制LED)

文章目录 前言一、串行通信口的功能以及串行通信口的结构及原理1.1 串行通信口的功能1.2 51单片机串口的结构 二、串行通信口的控制寄存器2.1 串行控制寄存器SCON2.2 电源控制寄存器PCON2.3 配置寄存器配置SCON寄存器配置PCON寄存器配置中断 2.4 实验单片机向pc发送数据PC向单片…

文心一言 VS 讯飞星火 VS chatgpt (58)-- 算法导论6.4 2题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;58&#xff09;-- 算法导论6.4 2题 二、试分析在使用下列循环不变量时&#xff0c;HEAPSORT 的正确性&#xff1a;在算法的第 2~5行 for 循环每次迭代开始时&#xff0c;子数组 A[1…i]是一个包含了数组A[1…n]中第i小元素的最大…