力扣每日一题79:单词搜索

news2024/11/17 21:29:13

题目描述:

给定一个 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 更大的情况下可以更快解决问题?

通过次数

462.9K

提交次数

997.8K

通过率

46.4%

思路和题解:

回溯和剪枝,设置一个函数check(i,j,k)判断从网格的下标[i][j]位置出发,能不能搜索到单词word[k]...word[wordSize-1](即word中下标k开始的后缀字符串)。判断所有的check(i,j,0),只要有一个为真即为真,否则为假。

对于check函数,如果board[i][j]!=word[k],return false;如果board[i][j]!=word[k]&&k==wordSize-1,return true;否则就判断相邻的四个位置能不能搜到word[k+1]...word[wordSize-1]。

要注意的是,check函数中包含了多次递归调用,如果是c++的话,参数写成传引用,这样比值传递运行速度快,能过。值传递的话我试过过不了。

i代码:

class Solution {
public:
    //往右,左,下,上四个方向走时行下标的变化和列下标的变化
    int directions[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
    bool check(vector<vector<char>> &board,int m,int n,vector<vector<int>> &visited,int i,int j,string word,int wordSize,int k)
    {
        if(board[i][j]!=word[k])
            return false;
        else if(k==wordSize-1)
            return true;
        visited[i][j]=1;
        for(int direc=0;direc<4;direc++)
        {//依次往四个方向走
            int newi=i+directions[direc][0],newj=j+directions[direc][1];
            if(newi>=0&&newi<m&&newj>=0&&newj<n&&visited[newi][newj]==0)
            {
                bool flag=check(board,m,n,visited,newi,newj,word,wordSize,k+1);
                if(flag)
                {
                    return true;
                }
            }
        }
        visited[i][j]=0;
        return false;
    }
    bool exist(vector<vector<char>>& board, string word) {
        int m=board.size();
        int n=board[0].size();
        vector<vector<int>> visited(m,vector<int>(n,0));
        int wordSize=word.size();
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                bool flag=check(board,m,n,visited,i,j,word,wordSize,0);
                if(flag)
                    return true;
            }
        }
        return false;
    }
};

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

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

相关文章

25-什么是事件循环

一、是什么 &#x1f37f;&#x1f37f;&#x1f37f;JavaScript是一门单线程的语言、 意味着同一时间内只能做一件事&#xff0c;但是这并不意味着单线程就是阻塞&#xff0c;而实现单线程非阻塞的方法就是事件循环 在JavaScript中&#xff0c;所有的任务都可以分为 同步任…

C++学习 day--20 new和delete关键字

1、new 和 delete 基本语法 1 &#xff09;在软件项目开发过程中&#xff0c;我们经常需要动态地分配和撤销内存空间&#xff0c;特别是数据结构中结点的插入与删除。在 C 语言中是利用库函数 malloc 和 free 来分配和撤销内存空间的。C 提供了较简便而功能较强的运算符 …

Screenium for Mac: 重新定义屏幕录制体验

你是否曾经需要记录你的屏幕活动&#xff0c;但却被复杂的软件界面和功能缺失所困扰&#xff1f;现在&#xff0c;Screenium for Mac可以解决你的烦恼。这是一款全新的屏幕录制工具&#xff0c;以其强大的功能和易用性&#xff0c;让你的屏幕录制体验焕然一新。 Screenium for…

三十七、【进阶】验证索引的效率

1、准备工作&#xff1a; 创建一张表&#xff0c;该表中有一千万条数据&#xff0c;名为tb_sku&#xff1b; 2、使用主键查询&#xff1a; select * from tb_stu where id1\G; 3、使用非索引查询&#xff1a; 4、给sn字段创建索引&#xff1a; 在创建过程中&#xff0c;发现…

工业4.0的安全挑战与解决方案

在当今数字化时代&#xff0c;工业4.0已经成为制造业的核心趋势。工业4.0的兴起为生产企业带来了前所未有的效率和灵活性&#xff0c;但与之伴随而来的是一系列的安全挑战。本文将深入探讨工业4.0的安全挑战&#xff0c;并提供一些解决方案&#xff0c;以确保制造业的数字化转型…

FOC系列(二)----继续学习DRV8301芯片

一、 程序框图 跟随上篇博客咱们继续往下看&#xff0c;下面是芯片内部的程序框图&#xff1a; 1.1 BUCK电路 1.2 内部各电源 1.3 SPI通信、栅极驱动器和时序控制器 1.4 MOSFET驱动电路 1.5 电流采样放大电路 数据手册只是给出了这一部分框图&#xff0c;但是没有更加详细的介…

解锁高效检索技能:掌握MySQL索引数据结构的精髓

文章目录 磁盘存储假设每条sql信息为1kb&#xff0c;主键ID为bigint型&#xff0c;一颗高度为2&#xff0c;3&#xff0c;4高度的B树分别可以存储多少行数据?为什么选用B树做索引而不选用二叉树或者B树?1.减少IO次数2.稳定查询3.存储效率高 为什么用 B 树做索引而不用哈希表做…

99. 激光炸弹(二维前缀和)

题目&#xff1a; 99. 激光炸弹 - AcWing题库 思路&#xff1a; 1.矩形/正方形求最值--->二维前缀和 2.注意&#xff1a;此题不可开两个数组&#xff0c;空间会爆&#xff0c;前缀和数组与原数据数组共用一个数组。 代码&#xff1a; #include <cstring> #inc…

如何保护您的个人信息数据库安全?

保护个人信息数据库安全是一项至关重要的任务&#xff0c;因为我们的个人信息可能包含许多敏感数据&#xff0c;如果泄露可能会导致各种问题&#xff0c;例如身份盗窃、网络诈骗等。以下是一些建议&#xff0c;可以帮助您保护您的个人信息数据库安全&#xff1a; 加密数据&…

Redis进军磁盘存储

目录 1、对抗价格优势&#xff1a;纳入磁盘&#xff0c;降低成本&#xff1f; 2、Redis的野心&#xff1a;无敌是多么寂寞&#xff0c;所以我们要开新地图 3、开发者异议&#xff1a;他们正在偏离我们选择Redis的初衷 4、结语&#xff1a;性能为王&#xff0c;但绝不甘于只…

公网远程访问macOS本地web服务器

# 公网访问macOS本地web服务器【内网穿透】 文章目录 1. 启动Apache服务器2. 公网访问本地web服务2.1 本地安装配置cpolar2.2 创建隧道2.3 测试访问公网地址3. 配置固定二级子域名3.1 保留一个二级子域名3.2 配置二级子域名4. 测试访问公网固定二级子域名 以macOS自带的Apache…

mac 查看GPU使用

首先搜索活动监视器 然后 点击窗口->gpu历史记录 记住不是立马出结果&#xff0c;而是 需要等半分钟左右的

Project Costs

/*** 初始化象棋的棋子&#xff0c;正常情况加载双方所有棋子&#xff0c;残局演示加载剩余棋子&#xff0c;按坐标位置摆放* * 【费用】* 因甲方要求产生工作量计算费用&#xff1b;新增、修改、删除需求* 因乙方生产缺陷工作量不计费用&#xff1b;缺陷、延误* * 来说个一个栗…

Istio 运行错误 failed to update resource with server-side apply for obj 问题解决

Istio 环境 kubernetes version: v1.18.2 istio version: v1.10.0运行之后 istio-operator 的日志就抛出下面错误&#xff0c;而且会一直重启 # kubectl get iop -A NAMESPACE NAME REVISION STATUS AGE istio-system iop-pro-cluster…

Helplook VS Document360:哪个更适合知识库管理?

在当今快速发展的业务环境中&#xff0c;高效的知识库管理对于组织有效地组织和监督其在线文档至关重要。Document360和HelpLook是两个强大的软件解决方案&#xff0c;在这一领域表现出色。在这篇博文中&#xff0c;我们将比较 Document360 和 HelpLook&#xff0c;对它们的特性…

操作系统缓冲区管理(单缓冲,双缓冲,循环缓冲,缓冲池)

目录 1.什么是缓冲区1.有什么作用 2.单缓冲1.常考题型:计算每处理一块数据平均需要多久1.假设输入时间T大于处理时间C2.假设输入时间T小于处理时间C 2.单缓冲通信 3.双缓冲1.计算数据处理的时间1. 假设T>CM2.假设T<CM 2.双缓冲通信 4.循环缓冲5.缓冲池1.共用缓冲区2.工作…

java版直播商城平台规划及常见的营销模式 电商源码/小程序/三级分销+商城免费搭建

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

第十三章---枚举类型与泛型

一&#xff0c;枚举类型 1.使用枚举类型设置常量 设置常量时&#xff0c;我们通常将常量放置在接口中&#xff0c;这样在程序中就可以直接使用。该常量稚因为在接口中定义常量时&#xff0c;该常量的修饰符为 final 与 static。 public interface Constants ( public static …

C#两个表多条件关联写法

文章目录 C#两个表多条件关联写法两个表实体类准备实体类数据初始化第一种 sql的左关联第二种相当于sql的 INNER JOIN写法一&#xff1a;FROM a FROM b where 多条件关联写法二&#xff1a; FROM JOIN INTO写法三&#xff1a; FROM JOIN 省略into C#两个表多条件关联写法 两个…

order by数据过多引起的cpu飙升

测试环境 1.目前数据库类型为pg数据库2.目前数据库业务为共享数据库,为减少其他业务对本次测试的影响,故选在业务空闲时间执行3.服务器性能为8C 32GB 500GB硬盘 原程序测试结果 优化后程序结果 出现原因 当数据量大时&#xff0c;order by排序操作会消耗大量的CPU资源&#…