力扣79.单词搜索

news2024/10/7 6:51:09

文章目录

  • 力扣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

提示:

m == board.length
n = board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
board 和 word 仅由大小写英文字母组成

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/word-search

方法一:回溯深搜

暴力法,思路及其简单:对每一个和字符串开头匹配的位置进行深搜

int count,**book;
bool result;
dfs(char **board,int boardSize,int *boardColSize,char *word,int i,int j,int step)
{
   int next_i,next_j,k;
   int direction[4][2]={0,1,1,0,-1,0,0,-1};//定义方向数组
   if(step==count) {
      result=true;
      return;
   }
   for(k=0;k<4;k++)
   {
      next_i=i+direction[k][0];//下一次尝试位置的行
      next_j=j+direction[k][1];//下一次尝试位置的列
      if(next_i>=0&&next_i<boardSize&&next_j>=0&&next_j<(*boardColSize))
      {
          if(book[next_i][next_j]==0&&board[next_i][next_j]==word[step])
          {
              book[next_i][next_j]=1;
              dfs(board,boardSize,boardColSize,word,next_i,next_j,step+1);
              book[next_i][next_j]=0;
          }
      }
   }
}
bool exist(char** board, int boardSize, int* boardColSize, char * word){
    book=(char *)calloc(sizeof(char),16);
    int i=0,j=0;
    count=0;
    result=false;
    while(word[i++]!='\0') count++;//计算给定的字符串长度
    book=(int **)malloc(sizeof(int *)*boardSize);
    for(i=0;i<boardSize;i++) book[i]=(int *)calloc(sizeof(int),*boardColSize);  
    for(i=0;i<boardSize;i++)
    {
     for(j=0;j<(*boardColSize);j++)
     {
        if(book[i][j]==0&&board[i][j]==word[0])//对每一个和字符串开头匹配的位置进行深搜
        {
          book[i][j]=1;
          dfs(board,boardSize,boardColSize,word,i,j,1);
          book[i][j]=0;
        }
     }
    }
    return result;
}

没有剪枝也没有技巧,效果不怎么好:
在这里插入图片描述

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

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

相关文章

STM32f103 CubeMX封装 led程序

本文代码使用 HAL 库。 文章目录前言一、LED 原理图二、CubeMX创建工程三、LED 相关函数1. 输出电平函数&#xff1a;2. 延时函数&#xff1a;3. 翻转电平函数&#xff1a;四、详细代码实验现象 &#xff1a;总结代码 源码&#xff1a;前言 从这篇文章开始&#xff0c;我们讲解…

6 Namespace,分组和DataID三者之间的关系

命名空间&#xff08;Namespace&#xff09; 用于进行租户粒度的配置隔离。不同的命名空间下&#xff0c;可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离&#xff0c;例如开发测试环境和生产环境的资源&#xff08;如配置、服务…

python 利用装饰器实现类似于flask路由

例子1&#xff1a; def f1():print(1111)def f2():print(2222)if __name__ __main__:print(33)打印结果&#xff1a; 33 在例子1中&#xff0c;f1() 与f2() 都没有被调用&#xff0c;只执行了print(33) f1与f2&#xff0c;是没有被调用的&#xff0c;但是如果f1 和 f2 上面…

R统计绘图 | 物种组成堆叠面积图(绝对/相对丰度,ggalluvial)

一、数据准备 数据使用的不同处理土壤样品的微生物组成数据&#xff0c;包含物种丰度&#xff0c;分类单元和样本分组数据。此数据为虚构&#xff0c;可用于练习&#xff0c;请不要作他用。 # 1.1 设置工作路径 #knitr::opts_knit$set(root.dir"D:\\EnvStat\\PCA")…

pyhon笔记——Anaconda安装

一、简介 Anaconda包括Conda、Python以及一大堆安装好的工具包&#xff0c;比如&#xff1a;numpy、pandas等 Miniconda包括Conda、Python conda是一个开源的包、环境管理器&#xff0c;可以用于在同一个机器上安装不同版本的软件包及其依赖&#xff0c;并能够在不同的环境之…

教你如何搭建培训机构-学员管理系统,demo可分享

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建培训机构-学员管理。1.2、应用场景学员信息报表展示所有正式学员信息&#xff0c;可对学员进行分配班级、转课、续课、扩科、退课、阶段测评等操作。2、设置方法2.1、表单搭建1&#xff09;新建表单【学员】&#xff0c;字段…

扬帆优配|翻倍牛股“高台跳水”,一度跌停,啥情况

2月23日上午&#xff0c;A股商场窄幅震荡&#xff0c;上证指数上午收盘涨0.07%&#xff0c;煤炭、电力设备等板块领涨。 总的来看&#xff0c;A股商场上午整体体现安静&#xff0c;不过仍有个股大幅动摇&#xff0c;比如前期翻倍热门股汉王科技盘中“高台跳水”&#xff0c;一…

mysql间隙锁

首先我们这里有一个表t&#xff0c;其中的数据如下图所示 注意哈 update由于操作的最新的值&#xff0c;所以是当前读&#xff01; 另外一个事务插入 8的时候发生锁 而我对id为10的数据进行更新&#xff0c;却不会被锁住 分析&#xff1a;在执行当前读时&#xff0c;由于id7不存…

从0开始写Vue项目-Vue实现数据渲染和数据的增删改查

从0开始写Vue项目-环境和项目搭建_慕言要努力的博客-CSDN博客从0开始写Vue项目-Vue2集成Element-ui和后台主体框架搭建_慕言要努力的博客-CSDN博客从0开始写Vue项目-Vue页面主体布局和登录、注册页面_慕言要努力的博客-CSDN博客从0开始写Vue项目-SpringBoot整合Mybatis-plus实现…

element 下拉框支持搜索并输入

前言 下拉框对于开发来说再常见不过了&#xff0c;也是界面设计中的常用组件&#xff0c;在部分使用场景下&#xff0c;我们需要做到下拉框可以选择的同时&#xff0c;支持搜素和输入&#xff0c;以 element 的下拉框组件为例&#xff0c;当我们同时设置属性让其支持搜素和输入…

ssh的使用

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

蓝桥杯:统计子矩阵(十三届省赛C++组)

前言&#xff1a; 这道题目是矩阵类型题目经典题型&#xff0c;解题大体思路是前缀和双指针扫描&#xff0c;在我这篇博客中 第十三届蓝桥杯省赛CB组题解_第十三届蓝桥杯b组c答案_正在黑化的KS的博客-CSDN博客 简单提了一下大致解法&#xff0c;今天刷题时又遇到了一个极其相似…

利用Qgis进行WRF中土地利用数据的替换

一、地形数据来源&#xff1a;MCD12Q1_V006 1.1数据介绍&#xff1a; MODIS三级数据土地覆盖类型产品&#xff08;Land Cover data&#xff09;是根据一年的Terra和Aqua观测所得的数据经过处理&#xff0c;描述土地覆盖的类型&#xff0c;分辨率为500m。该土地覆盖数据集中包…

jdk、jre、jvm、javase、javaee

JDK Java开发工具包(Java Development Kit)。 开发者使用&#xff0c;里面除了JRE之外还包含java工具。 javac Java源程序编译器&#xff0c;将Java源代码转换成字节码。java Java解释器&#xff0c;直接从字节码文件&#xff0c;又称为类文件。执行Java应用程序的字节代码。…

运维必看|跨国公司几千员工稳定访问Office365,怎么实现?

【客户背景】本次分享的客户是全球传感器领域的领导者&#xff0c;其核心产品为电流和电压传感器&#xff0c;被广泛应用于驱动和焊接、可再利用能源以及电源、牵引、高精度、传统和新能源汽车等领域。 作为一家中等规模的全球化公司&#xff0c;该公司在北京、日本、西欧、东欧…

Spring事务管理(@Transactional使用)-官方原版

全面的事务支持是使用Spring的最令人信服的理由之一。 框架。Spring 框架为事务提供了一致的抽象 具有以下优势的管理&#xff1a;跨不同事务 API&#xff08;如 Java&#xff09;的一致编程模型 事务 API &#xff08;JTA&#xff09;、JDBC、Hibernate 和 Java Persistence A…

[docker]笔记-网络管理

1、docker网络原理 docker安装完成后&#xff0c;会在宿主机中创建一个虚拟网桥&#xff0c;用于容器之间和容器与外部网络的连接。虚拟网桥通常名称为docker0.可以使用ip link show命令进行查看&#xff1a; 在docker中&#xff0c;各个容器是通过这个docker0的虚拟网桥实现互…

IE自动跳转Edge?教你如何解决

本期看点&#xff1a; 最新windows10系统中, IE浏览器已经无法开启 取而代之是Edge浏览器 windows10默认不在安装IE浏览器 微软不在提供下载链接 而IE确实也存在一些安全隐患 大家非必要尽量避免使用IE浏览器 可选择使用Edge、Chrome、Firefox等 打开IE浏览器方式一&am…

laravel与workerman结合

安装workerman composer require workerman/workerman生成命令 php artisan make:command Workerman<?phpnamespace App\Console\Commands;use Illuminate\Console\Command; use Workerman\Worker;class Workerman extends Command {/*** The name and signature of the …

2022年度商业关键词调研报告(小红书美妆个护)

美妆个护&#xff0c;作为小红书最火热的领域之一&#xff0c;不断塑造流行新趋势&#xff0c;大量品牌在小红书孵化爆品&#xff0c;崛起破圈。回顾2022年&#xff0c;小红书美妆个护领域有哪些热门新趋势呢&#xff1f; 由此&#xff0c;千瓜推出《2022年度商业关键词调研报告…