力扣0079单词搜索

单词搜索

难度:中等

题目描述:

给定一个 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

题解:

根据题目可得需要用到回溯算法
遍历表格内的每一个元素,如果满足要求即可回溯,最终得到结果,以下为具体步骤:

  • 定义两个方向数组moveXmoveY
  • 如果当前位置的元素和单词中的元素内容不相同,返回false
  • 如果遍历到单词的最后一个元素,返回true
  • 将当前位置设置为true,并进行循环:
    • 新的方向为当前方向加上第i次循环中moveX[i]move[Y]的值
    • 如果新的方向均大于零并且移动的下一次元素位置不超过二维数组边界并且将要遍历的元素没有使用过,那么就进行回溯,将新的移动位置传入到回溯,并将判断的单词元素下标加一
    • 如果回溯结束之后满足条件,返回ture
    • 如果循环结束之后没有最终满足,对操作进行回头,即将当前位置设为未使用并返回false
  • 遍历每一个元素,对其都进行回溯,如果其中的元素在回溯中最后返回true,则返回true
  • 如果所有元素都不满足条件,则返回false

最后的结果即为题目答案

想法代码

class Solution
{readonly int[] desX = new int[] { 1, -1, 0, 0 };readonly int[] desY = new int[] { 0, 0, 1, -1 };public static void Main(String[] args){char[][] board ={new[] { 'A', 'B', 'C', 'E' },new[] { 'S', 'F', 'C', 'S' },new[] { 'A', 'D', 'E', 'E' }};string word = "ABCB";Solution solution = new Solution();bool res = solution.Exist(board, word);Console.WriteLine(res);}bool DFS(int x, int y, string word, int index, char[][] board, bool[,] used){if (word[index] != board[x][y]) return false;if (index == word.Length - 1) return true;used[x, y] = true;for (int i = 0; i < 4; i++){int newX = x + desX[i];int newY = y + desY[i];if (newX >= 0 && newY >= 0 && newX < board.Length && newY < board[0].Length && used[newX, newY] != true){if (DFS(newX, newY, word, index + 1, board, used)) return true;}}used[x, y] = false;return false;}public bool Exist(char[][] board, string word){bool[,] used = new bool[board.Length, board[0].Length];for (int i = 0; i < board.Length; i++){for (int j = 0; j < board[i].Length; j++){if (board[i][j] == word[0]){if (DFS(i, j, word, 0, board, used)) return true;}}}return false;}
}

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

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

相关文章

TypeSript教程基础用法(TS)

TypeScript基础语法 布尔值 TypeScript中可以使用boolean来表示这个变量是布尔值&#xff0c;可以赋值为true或者false。 let isDone: boolean false;数字 TypeScript里的所有数字都是浮点数&#xff0c;这些浮点数的类型是 number。除了支持十进制&#xff0c;还支持二进…

XSS_Labs靶场通关笔记

每一关的方法不唯一&#xff1b;可以结合源码进行分析后构造payload&#xff1b; 通关技巧&#xff08;四步&#xff09;&#xff1a; 1.输入内容看源码变化&#xff1b; 2.找到内容插入点&#xff1b; 3.测试是否有过滤&#xff1b; 4.构造payload绕过 第一关 构造paylo…

势态知感是一种主动的态势感知

势态知感是指主动观察和感知周围环境中存在的势态或态势变化的能力。势态指的是事物所呈现出来的动态特征和趋势。势态知感的主动性体现在人们通过观察、感知和分析过往的经验&#xff0c;来预测或捕捉到事物存在的势态&#xff0c;从而可以作出相应的决策和行动。 势态知感在…

8-Docker网络命令之prune

1.prune介绍 Docker网络命令prune是用来删除所有无用的网络 2.prune用法 docker network prune [参数] [rootcentos79 ~]# docker network prune --helpUsage: docker network prune [OPTIONS]Remove all unused networksOptions:--filter filter Provide filter values …

LightDB 24.1 UNION支持null类型匹配

背景介绍 在LightDB 24.1之前的版本&#xff0c;UNION null类型匹配会报错。 lightdbpostgres# select null l_zqlbmx2 union all select null l_zqlbmx2 union all select sysdate l_zqlbmx; ERROR: UNION types text and timestamp without time zone…

使用scyllaDb 或者cassandra存储聊天记录

一、使用scyllaDb的原因 目前开源的聊天软件主要还是使用mysql存储数据&#xff0c;数据量大的时候比较麻烦&#xff1b; 我打算使用scyllaDB存储用户的聊天记录&#xff0c;主要考虑的优点是&#xff1a; 1&#xff09;方便后期线性扩展服务器&#xff1b; 2&#xff09;p…

Redis数据类型及底层实现

文章目录 1.3.1 5种基本数据类型1.3.1.1 总结篇1.3.1.2 底层源码引入篇1.3.1.2.1 redis是字典数据库KV键值对到底是什么1.3.1.2.2 数据类型视角1.3.1.2.3 数据模型解析&#xff08;重点&#xff09;1.3.1.2.4 redisObjec1.3.1.2.5 SDS 1.3.1.3 String1.3.1.3.1 底层分析1.3.1.3…

uniCloud 免费版和商用版

概述 uniCloud为每个开发者提供一个免费的服务空间&#xff0c;更低门槛按量付费是serverless的特色&#xff0c;如果没有消耗硬件资源&#xff0c;就完全不用付款serverless比传统的云主机更便宜传统云主机一旦被攻击&#xff0c;高防价格非常昂贵。而uniCloud无需支付高防费…

k8s的图形化工具rancher

1、rancher&#xff1a;是一个开源的企业级多集群的k8s管理平台 2、rancher和k8s的区别 &#xff08;1&#xff09;都是为了容器的调度和编排系统 &#xff08;2&#xff09;但rancher不仅能够调度&#xff0c;还能管理k8s集群&#xff0c;自带监控&#xff08;普罗米修斯&a…

MQ面试题合集

前言 前文介绍了mysql,redis相关知识&#xff0c;并概述了向量数据库相关。今天我们学习消息中间件相关知识。 MQ面试题合集 什么是消息队列&#xff08;MQ&#xff09;&#xff1f; 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法&#xff0c;通过…

QEMU用户态模拟运行,S390X、ARMv7L/ELF程序(Ubuntu)

准备虚拟机&#xff1a; sudo apt-get install qemu-system qemu-user-static -y 准备交叉编译器环境&#xff1a; 在 Ubuntu 18.04 x86_64 上面安装 Linux-ARMv7 A/L GCC编译器-CSDN博客 S390X交叉编译器 ############### sudo apt install gcc-s390x-linux-gnu sudo apt in…

【Linux】第三十六站:信号

文章目录 一、信号的概念1.信号概念2.前台与后台进程3.信号的处理4.硬件层面5.信号与我们的代码是异步的 二、信号的产生1.产生的方式2.键盘组合键3.kill命令4.系统调用4.1 kill系统调用4.2 raise4.3 abort 5.异常软件条件5.1 异常产生信号5.2 alarm&#xff08;软件条件产生信…

【MySQL】学习如何通过DML更新数据库的数据

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-QIqURn9fNFMjLD9l {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

形态学操作之腐蚀及膨胀的数学原理——数字图像处理

在数学上&#xff0c;腐蚀和膨胀是集合论的操作&#xff0c;通常应用于图像处理中的二值图像。可以将二值图像视为一个集合&#xff0c;其中包含所有像素值为1&#xff08;或高亮&#xff09;的像素点的集合。这些操作都是基于图像与一个给定的结构元素&#xff08;一个小的形状…

【Go 快速入门】数组 | 切片 | 映射 | 函数 | 结构体 | 方法和接收者

文章目录 数组切片append 函数copy 函数删除元素 映射delete 函数 函数init 特殊的函数defer 语句panic / recover 错误处理 类型结构体内存对齐JSON 序列化与反序列化方法和接收者 项目代码地址&#xff1a;03-ArraySliceMapFuncStruct 数组 基本格式&#xff1a;var 数组变…

Go 命令行解析 flag 包之快速上手

本篇文章是 Go 标准库 flag 包的快速上手篇。 概述 开发一个命令行工具&#xff0c;视复杂程度&#xff0c;一般要选择一个合适的命令行解析库&#xff0c;简单的需求用 Go 标准库 flag 就够了&#xff0c;flag 的使用非常简单。 当然&#xff0c;除了标准库 flag 外&#x…

STL标准库(五) 算法,伪函数与空间适配器

伪函数 仿函数&#xff1a;像函数但不是函数&#xff0c;一般有两种形式struct或class struct或class之所以能够进行仿函数的编写是因为他们可以进行()的运算符重载 int Min(int nNumberA, int nNumberB) 这是一个函数 { return nNumberA < nNumberB ? nNumberA : nNum…

Linux 网络流量相关工具

本文聚焦于网络流量的查看、端口占用查看。至于网络设备的管理和配置&#xff0c;因为太过复杂且不同发行版有较大差异&#xff0c;这里就不赘述&#xff0c;后面看情况再写。 需要注意的是&#xff0c;这里列出的每一个工具都有丰富的功能&#xff0c;流量/端口信息查看只是其…

使用vue_cli脚手架创建Vue项目(cmd和图形化方式)

使用vue_cli脚手架创建Vue项目&#xff08;cmd和图形化方式&#xff09; 创建项目(cmd方式) vue create vue_cli1.方向键选择manually select feature(手动选择方式创建)&#xff0c;回车 2.按空格键选择需要的组件&#xff1a;Babel、PWA、Router、Vuex、CSS&#xff0c;回…

Linux - 数据流重定向、管道符、环境变量配置文件的加载

概述 想了解Linux编程&#xff0c;shell脚本是绕不开的关键知识点&#xff0c;原计划写一个整篇来分享shell的来龙去脉&#xff0c;但知识点过于繁杂&#xff0c;先分享一下学习shell的准备工作&#xff0c;数据流重定向、管道符、环境变量配置文件的加载&#xff0c;有助于知…