从零学算法79

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

  • 我的思路:首先由于不确定从哪个点开始可以构成目标单词,所以肯定是枚举每个点作为起点。这种路径问题,想都不用想肯定是 dfs,先想一下入参,当我从某个点开始找,那肯定入参要有坐标,我们还需要知道已经匹配到哪一步了,所以用一个数字来表示已匹配的单词字符数;接着就是出口,首先出了边界肯定要返回 false,由于题目说不能重复使用,所以递归过程中遇到重复的坐标也要返回 false,当然最容易想到的,当前坐标的字符和目标单词当前匹配字符不匹配也肯定返回 false。当匹配到最后一个字符时还没有返回 false,自然是只能返回 true 了。最后就是 dfs 的每一步的内容。由于方向不定,所以往上下左右寻找下一位匹配字符,有一个满足就继续寻找即可。
  •   String WORD;char[][] BOARD;int m,n;public boolean exist(char[][] board, String word) {BOARD = board;WORD = word;m=board.length;n=board[0].length;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(dfs(i,j,0))return true;}}return false;}public boolean dfs(int x,int y,int cur){// 超过边界if(x < 0 || x >= m || y < 0 || y >= n)return false;// word 的某一位字符和当前坐标处字符不匹配if(WORD.charAt(cur) != BOARD[x][y])return false;if(cur == WORD.length()-1 )return true;// 为了防止重复将字符置为空,这样下次和坐标处字符必定不匹配BOARD[x][y] = '\0';boolean up = dfs(x-1,y,cur+1);boolean down = dfs(x+1,y,cur+1);boolean left = dfs(x,y-1,cur+1);boolean right = dfs(x,y+1,cur+1);// 还原字符BOARD[x][y] = WORD.charAt(cur);return up || down || left || right;}
    
  • 上面的还原字符有必要说一下,这是我唯一没想到的一点。无论你用什么方式来防止重复访问某个坐标,你都需要还原这一步。我原本以为用一个 hashSet 记录该坐标是否访问过,下一次访问直接返回 false 即可。但是假设一条错误的路径会经过比如坐标 [2,2],然后将其标记为已访问过,最终该路径结果返回 false。但是,有可能正确的路径也包含了这个坐标 [2,2],但是由于错误路径提前把这个坐标访问掉了,所以你正确的路径反而没法访问了,到这个坐标直接返回了 false,所以需要还原。之所以这样能还原,我个人理解是因为比如还是 [2,2] 这个点,错误路径为 [1,2]->[2,2]->... 然后返回 false。而正确路径比如为 [1,2]->[1,3]->[2-3]->[2,2]->... 然后返回 true。在错误路径代码执行期间,在递归的第二层把 [2,2] 置空,之后的每一层递归都将无法访问这个点,而正确路径在递归的第四层才访问这个点,这时候当然无法访问了;而还原也就意味着,当那些错误的可能性被否决,只要你能够回溯到第二层递归,就代表我在第二层就把 [2,2] 用掉是不可行的,也就是说在第二层不能把 [2,2] 用掉。那么我自然要给你重新访问 [2,2] 的机会,所以有还原操作。也就是说我给错误路径访问 [2,2],他不中用,那我换个人给机会,肯定要公平地也给你一次访问 [2,2] 的机会。

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

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

相关文章

基于BP神经网络的火焰识别,基于BP神经网络的火灾识别

目标 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 代码链接:基于BP神经网络的火焰识别,基于BP神经网络的火灾识别资源-CSDN文库 https://download.csdn.net/download/abc991835105/88215…

怎么检测UI卡顿?(线上及线下)

什么是UI卡顿&#xff1f; 在Android系统中&#xff0c;我们知道UI线程负责我们所有视图的布局&#xff0c;渲染工作&#xff0c;UI在更新期间&#xff0c;如果UI线程的执行时间超过16ms&#xff0c;则会产生丢帧的现象&#xff0c;而大量的丢帧就会造成卡顿&#xff0c;影响用…

Matlab彩色图像转索引图像

索引图像 索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像包括一个数据矩阵X&#xff0c;一个调色板矩阵map&#xff0c;也称为颜色映像矩阵。其中&#xff0c;数据矩阵X可以是8位无符号整型、16位无符号整型或双精度类型。调色板矩阵map是一个m3的数据阵列&…

Adapting Language Models to Compress Contexts

本文是LLM系列文章&#xff0c;针对《Adapting Language Models to Compress Contexts》的翻译。 使语言模型适应上下文压缩 摘要1 引言2 相关工作3 方法4 实验5 上下文学习6 压缩检索语料库实现高效推理7 结论不足 摘要 1 引言 2 相关工作 3 方法 4 实验 5 上下文学习 …

亚马逊云科技CEO谈及企业领导力原则的核心:坚持顾客至上

亚马逊云科技首席执行官Adam Selipsky几乎从一开始就在那里&#xff1a;他于2005年加入&#xff0c;在效力亚马逊11年后于2016年离开&#xff0c;转而经营Tableau&#xff0c;并于2021年成为亚马逊云科技首席执行官。当时亚马逊云科技前首席执行官安迪贾西(Andy Jassy)接替杰夫…

大数据(一)定义、特性

大数据&#xff08;一&#xff09;定义、特性 本文目录&#xff1a; 一、写在前面的话 二、大数据定义 三、大数据特性 3.1、大数据的大量 (Volume) 特性 3.2、大数据的高速(Velocity)特性 3.3、大数据的多样化 (Variety) 特性 3.4、大数据的价值 (value) 特性 3.5、大…

废品回收抢单派单小程序开源版开发

废品回收抢单派单小程序开源版开发 用户注册和登录&#xff1a;用户可以通过手机号码注册和登录小程序&#xff0c;以便使用废品回收抢单派单功能。废品回收订单发布&#xff1a;用户可以发布废品回收订单&#xff0c;包括废品种类、数量、回收地点等信息。废品回收抢单&#…

React通过docx-preview预览Word文档

前言 在基于React的Web应用中&#xff0c;我们经常遇到需要预览和展示Word文档的需求。而docx-preview是一个优秀的React组件库&#xff0c;可以帮助我们实现在Web页面上预览Word文档的功能。本文将介绍如何使用docx-preview组件来实现Word文档的预览&#xff0c;并提供一个案例…

编解码视频测试序列集

https://kodi.wiki/view/Samples https://ultravideo.fi/#testsequences 原文&#xff1a;http://forum.doom9.org/archive/index.php/t-135034.html his thread is meant to hold links and references to test video clip sequences intended to be used for various video…

Linux 网络文件共享介绍

Linux 网络文件共享介绍 一.常见的存储类型 目前常见的存储类型有 DAS,NAS,SAN 等&#xff0c;最主要的区别是硬盘存储媒介是如何 于处理器连接的&#xff0c;以及处理器使用何种方式来访问磁盘&#xff0c;以及访问磁盘使用 的协议(网络协议、I/O 协议)。 三种存储类型如下 直…

JavaScript箭头函数

Arrow Functions&#xff08;箭头函数&#xff09;是 ES6 中引入的一种新的函数表达式语法&#xff0c;它可以更简洁地定义函数&#xff0c;并且不需要像普通函数一样使用 function 关键字。 例如我们上节课的代码&#xff1a; const peopleAge function calcAge1(birthYear)…

vue3+ts+uniapp小程序端自定义日期选择器基于内置组件picker-view + 扩展组件 Popup 实现自定义日期选择及其他选择

vue3ts 基于内置组件picker-view 扩展组件 Popup 实现自定义日期选择及其他选择 vue3tsuniapp小程序端自定义日期选择器 1.先上效果图2.代码展示2.1 组件2.2 公共方法处理日期2.3 使用组件 3.注意事项3.1refSelectDialog3.1 backgroundColor"#fff" 自我记录 1.先上…

error: can‘t find Rust compiler

操作系统 win11 pip install -r requirements.txt 报错如下 Using cached https://pypi.tuna.tsinghua.edu.cn/packages/56/fc/a3c13ded7b3057680c8ae95a9b6cc83e63657c38e0005c400a5d018a33a7/pyreadline3-3.4.1-py3-none-any.whl (95 kB) Building wheels for collected p…

哲讯科技携手无锡华启动SCM定制化项目,共谋数字化转型之路

无锡华光座椅弹簧有限公司启动SCM定制化项目 近日&#xff0c;无锡华光座椅弹簧有限公司顺利举行了SCM定制化项目的启动会。本次启动会作为该项目实施的重要里程碑&#xff0c;吸引了双方项目组核心成员的共同参与&#xff0c;并见证了项目的正式启动。 无锡华光座椅弹簧有限公…

Angular中如何获取URL参数?

Angular中的ActivatedRoute中保存着路由信息&#xff0c;可用来提取URL中的路由参数。 constructor(private route: ActivatedRoute){}ngOnInit(): void {this.getUser();}getUser(): void {const id this.route.snapshot.paramMap.get(id);} }route.snapshot是一个路由信息的…

计算机网络面试题

文章目录 描述HTTP和HTTPS的区别Cookie和Session有什么区别BIO、NIO、AIOTCP三次握手和四次挥手跨域请求是什么&#xff1f;有什么问题&#xff1f;怎么解决&#xff1f;网页输入url&#xff0c;到渲染整个界面的整个过程&#xff0c;以及中间件用了什么协议Rest、RestfulTCP的…

Java开发工作问题整理与记录

1、为什么Autowired不能注入static成员属性 扫描Class类需要注入的元数据的时候&#xff0c;直接选择忽略掉了static成员&#xff08;包括属性和方法&#xff09; Spring 依赖注入是依赖set方法, set方法是普通的对象方法,static变量是类的属性 AutowiredAnnotationBeanPostP…

嵌入式开发之堆栈调试打印

简介 打印堆栈的常用方法包括&#xff1a; glibc中的backtrace函数gcc内置函数__builtin_return_address第三方库libunwind 1 glibc中的backtrace 1. 1函数原型 #include <execinfo.h>/** 功能: 获取当前线程的调用堆栈并存放在buffer中(指向字符串数组的指针)* par…

【C语言】动态内存管理(malloc,free,calloc,realloc)-- 详解

一、动态内存分配 定义&#xff1a;动态内存分配 (Dynamic Memory Allocation) 就是指在程序执行的过程中&#xff0c;动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样&#xff0c;需要预先分配存储空间&#xff0c;而是由系统根据程…

kafka复习:(20):消费者拦截器的使用

一、定义消费者拦截器&#xff08;只消费含"sister"的消息&#xff09; package com.cisdi.dsp.modules.metaAnalysis.rest;import org.apache.kafka.clients.consumer.ConsumerInterceptor; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.…