leetcode 79.单词搜索

news/2024/10/16 2:19:25/

思路:dfs回溯

有点麻烦,因为这里的dfs模型还不和那个灌水模型一样,灌水模型不需要关心回溯状态的事情,但是这里我们选择单词的时候,每一次独立的搜索,都必须保证其他的搜索不影响到这一次搜索。所以这就需要我们在搜索完成的每一步之后进行回溯。

除回溯之外,其他的都和灌水模型的模板代码很像,这里说一下不同的地方:

第一:这里dfs的返回值是boolean类型,因为我们需要判断这次搜索是不是符合条件,有一个符合条件的就说明至少有一个搜索路径是符合题意的,所以需要用到返回值。

第二:参数值很多,从左到右依次是横纵坐标、word的对比位置、board数组、目标单词、存储结果的字符串、这一次大搜索里面的小搜索几个路径里有多少个符合单词条件的路径。

因为我们直接判断里面的单词是不是对应,所以我们遍历出来存储的字符串只要和word的长度一样,就一定是符合题意的。

class Solution {int dx[]={-1,1,0,0};int dy[]={0,0,-1,1};boolean [][]flag;boolean res=false;public boolean exist(char[][] board, String word) {flag=new boolean[board.length][board[0].length];boolean []cnt=new boolean[4];for(int i=0;i<board.length;i++){for(int j=0;j<board[0].length;j++){if(!flag[i][j]&&board[i][j]==word.charAt(0)){flag[i][j]=true;StringBuilder s=new StringBuilder();s.append(board[i][j]);res=dfs(i,j,1,board,word,s,cnt);s.deleteCharAt(s.length()-1);flag[i][j]=false;}Arrays.fill(cnt,false);if(res)return true;}}return false;}public boolean dfs(int x,int y,int index,char [][]board,String word,StringBuilder s,boolean []cnt){if(s.length()==word.length()){return true;}boolean f=false;for(int i=0;i<4;i++){int a=dx[i]+x;int b=dy[i]+y;if(a<0||b<0||a>=board.length||b>=board[0].length)continue;if(board[a][b]!=word.charAt(index))continue;if(flag[a][b])continue;s.append(board[a][b]);flag[a][b]=true;cnt[i]=dfs(a,b,index+1,board,word,s,cnt);flag[a][b]=false;s.deleteCharAt(s.length()-1);}for(int i=0;i<4;i++){if(cnt[i])return true;}return false;}
}


http://www.ppmy.cn/news/1539721.html

相关文章

北航团队在病理AI领域的研究进展|文献速递·24-10-13

小罗碎碎念 这一期选择的五篇文章都是病理AI相关的&#xff0c;切均来自北航郑钰山老师的团队&#xff0c;所以内容上会有一些衔接和递进。 最早的是22年的一篇&#xff0c;最新的也有今年7月发表的&#xff0c;时效性还是可以保证的。不过&#xff0c;这些文章更偏向方法学&…

Vue GridLayout 入门指南

Vue GridLayout 入门指南 在构建复杂的 Web 应用时,灵活的布局系统往往是不可或缺的。今天,我们来介绍一个强大的 Vue.js 布局工具: vue-gridlayout。这个库允许你创建可拖拽、可调整大小的网格布局,非常适合构建仪表板、管理界面等需要高度可定制布局的应用。 vue-gridlayou…

银行业AI大模型,从入局到求变

在人工智能浪潮的推动下&#xff0c;AI大模型技术正以前所未有的方式&#xff0c;改变着各行各业的服务方式和用户体验。这其中&#xff0c;银行业作为数据密集型行业&#xff0c;成为大模型率先探索的重要行业。 那么&#xff0c;经过一年多的发展&#xff0c;银行业在AI大模…

AI核身-金融场景凭证篡改检测Baseline实践

金融领域交互式自证业务中涵盖信用成长、用户开户、商家入驻、职业认证、商户解限等多种应用场景&#xff0c;通常都需要用户提交一定的材料&#xff08;即凭证&#xff09;用于证明资产收入信息、身份信息、所有权信息、交易信息、资质信息等&#xff0c;而凭证的真实性一直是…

大厂面试真题-说说String、StringBuilder和StringBuffer的区别

String、StringBuilder、StringBuffer都是Java中用于处理字符串的类&#xff0c;但它们在使用和功能上有显著的区别。以下是对这三者的详细比较&#xff1a; 一、String类 不可变性&#xff1a;String类的值是不可变的&#xff0c;即每次对String的操作&#xff08;如拼接、替…

Hadoop服务端口号、Spark端口号、Hive端口号以及启动命令

文章目录 1. 服务端口号1.1 Hadoop相关的服务端口号1.2 Spark相关的服务端口号1.3 Hive的连接端口 2. 服务启动指令 1. 服务端口号 1.1 Hadoop相关的服务端口号 HDFS的web页面访问端口 9870HDFS 的程序访问端口 8020Yarn的访问端口 8088历史日志访问端口 19888 1.2 Spark相关…

植物大战僵尸杂交版

最新版植物大战僵尸杂交版 最近本款游戏火爆 下载资源如下&#xff1a; win版本&#xff1a;2.3.7 链接&#xff1a;下载地址 提取码&#xff1a;9N3P Mac&#xff08;苹果版本&#xff09;&#xff1a;2.0.0 链接&#xff1a;下载地址 提取码&#xff1a;Bjaa 介绍&#xff…

SpringBoot日常:redission的接入使用和源码解析

文章目录 一、简介二、集成redissionpom文件redission 配置文件application.yml文件启动类 三、JAVA 操作案例字符串操作哈希操作列表操作集合操作有序集合操作布隆过滤器操作分布式锁操作 四、源码解析 一、简介 Redisson 是一个在 Redis 的基础上实现的 Java 驻内存数据网格…