【LeetCode热题100】79. 单词搜索(回溯)

news2024/11/26 3:45:22

一.题目要求

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

四.解题思路

存不存在问题最好用bool型递归,不然时间差很多

五.代码实现

用void返回,找到了也会继续递归判断完所有条件

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        string path;
        vector<vector<bool>> used(board.size(), vector<bool>(board[0].size()));
        for (int i = 0; i < board.size(); i++) {
            for (int j = 0; j < board[0].size(); j++) {
                dfs(board, word, used, i, j, 0);
                if (finded)
                    return true;
            }
        }
        return finded;
    }

    void dfs(vector<vector<char>>& board, string word,
             vector<vector<bool>>& used, int x, int y, int step) {
        if (finded)
            return;
        if (word.size() == step) {
            finded = true;
            return;
        }
        if (x >= board.size() || x < 0)
            return;
        if (y >= board[0].size() || y < 0)
            return;
        if (used[x][y])
            return;
        if (word[step] != board[x][y])
            return;

        step++;
        used[x][y] = true;

        dfs(board, word, used, x - 1, y, step);
        dfs(board, word, used, x, y + 1, step);
        dfs(board, word, used, x + 1, y, step);
        dfs(board, word, used, x, y - 1, step);
        used[x][y] = false;
    }

private:
    bool finded = false;
};

在这里插入图片描述
bool型,只要找到一种满足的就直接终止后续递归

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        string path;
        vector<vector<bool>> used(board.size(), vector<bool>(board[0].size()));
        for (int i = 0; i < board.size(); i++) {
            for (int j = 0; j < board[0].size(); j++) {
                if (dfs(board, word, used, i, j, 0))
                    return true;
            }
        }
        return false;
    }

    bool dfs(vector<vector<char>>& board, string& word,
             vector<vector<bool>>& used, int x, int y, int step) {
    
        if (word.size() == step) 
            return true;
        
        if (x >= board.size() || x < 0 || y >= board[0].size() || y < 0 || used[x][y] || word[step] != board[x][y])
            return false;
        step++;
        used[x][y] = true;
        bool result = dfs(board, word, used, x - 1, y, step) || 
        			  dfs(board, word, used, x, y + 1, step) || 
        			  dfs(board, word, used, x + 1, y, step) || 
        			  dfs(board, word, used, x, y - 1, step);
        used[x][y] = false;

        return result;
    }


};

在这里插入图片描述

六.题目总结

1.能传引用传引用
2.二维数组初始化:vector<vector> used(board.size(), vector(board[0].size()));
3.

for (int i = 0; i < board.size() && !found; i++) {
            for (int j = 0; j < board[0].size() && !found; j++) {
                dfs(board, word, used, i, j, 0);
            }
}

保证了每个点都可作为起始点

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

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

相关文章

揭秘代码安全:告别硬编码,灵活策略守护你的账户密码信息安全

前言 在编写代码时&#xff0c;为了遵循严格的安全规范&#xff0c;应避免硬编码任何敏感信息如账号凭证、密钥等直接出现在源代码中。相反&#xff0c;推荐采取安全措施&#xff0c;如使用环境变量、加密存储或安全凭据管理系统来间接引用和保护这类数据。如此一来&#xff0c…

使用 Docker 部署 Puter 云桌面系统

1&#xff09;Puter 介绍 :::info GitHub&#xff1a;https://github.com/HeyPuter/puter ::: Puter 是一个先进的开源桌面环境&#xff0c;运行在浏览器中&#xff0c;旨在具备丰富的功能、异常快速和高度可扩展性。它可以用于构建远程桌面环境&#xff0c;也可以作为云存储服…

c++对象指针

对象指针在使用之前必须先进行初始化。可以让它指向一个已定义的对象&#xff0c;也可以用new运算符动态建立堆对象。 定义对象指针的格式为&#xff1a; 类名 *对象指针 &对象; //或者 类名 *对象指针 new 类名(参数); 用对象指针访问对象数据成员的格式为&#xff1a…

python很坐标报错ufunc ‘isfinite‘ not supported for the input types

python使用plt画图的时候&#xff0c;出错。 出错全文如下&#xff1a; Traceback (most recent call last): plt.show() return _get_backend_mod().show(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ __call__ manager.show(**kwar…

Node.js环境调用百度智能云(百度云)api鉴权认证三步走

方式一 :Postman脚本的方式生成v1版本的认证字符串 Postman脚本下载 下载Postman pre-request Script 设置 Authorization 示例脚本 方式二&#xff1a;在线签名工具生成 (试用于验证编程字符串签名是否有错误) 签名计算工具 https://cloud.baidu.com/signature/index.html …

深入核心招聘场景,用友大易帮助健合集团解决「渠道、效率、体验」三件事

自1999年成立以来&#xff0c;健合集团一直致力于婴幼儿营养与护理、成人自然健康营养与护理、以及宠物营养与护理三大核心领域。作为全球高端家庭营养及护理品牌的佼佼者&#xff0c;健合集团始终秉持「让人们更健康更快乐」的企业理念&#xff0c;这不仅体现在产品和服务上&a…

腾讯云(CVM)托管进行权限维持

前言 刚好看到一个师傅分享了一个阿里云ECS实战攻防&#xff0c;然后想到了同样利用腾讯云CVM的托管亦可实现在实战攻防中的权限维持。 简介 腾讯云自动化助手&#xff08;TencentCloud Automation Tools&#xff0c;TAT&#xff09;是一个原生运维部署工具&#xff0c;它可…

苹果放弃造车计划,专家称之All in AI / 阿里巴巴主席蔡崇信:中国电子商务渗透率有望超过40% |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 苹果放弃造车计划&#xff0c;专家称之All in AI 阿里巴巴主席蔡崇信&#…

JDK、JRE和JDK的关系

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

【Python项目】AI动物识别工具

目录 背景 技术简介 系统简介 界面预览 背景 成像技术在全球科技发展中扮演了关键角色。在科学研究领域&#xff0c;拍摄所得的图像成为了一种不可或缺的研究工具。特别是在生态学与动物学研究中&#xff0c;鉴于地球的广阔地域和多样的气候条件&#xff0c;利用图像技术捕…

生物信息学数据库分类

生物信息学数据库 &#xff08;一&#xff09;文献数据库 1、PubMed&#xff1a;拥有超过两百六十万生物医学文献的数据库&#xff0c;这些文献来源于MEDLINE&#xff0c;也就是生物医学文献数据库、生命科学领域学术杂志、以及在线的专业书籍。链接&#xff1a;PubMed (nih.g…

【原创】基于springboot+vue疫苗预约管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

亚马逊卧式婴儿车和坐式婴儿车需要那些认证?欧盟美国加拿大要求那些检测标准

卧式婴儿车和坐式婴儿车上亚马逊需要那些认证&#xff1f;欧盟美国加拿大要求那些检测标准&#xff1f; 很荣幸您能看到我的资讯&#xff0c;亚马逊各国认证是我公司的优势产品&#xff0c;确保申诉成功并正常销售。服务周到&#xff0c;速度快&#xff0c;周期短。 欧盟 卧…

蓝色wordpress外贸建站模板

蓝色wordpress外贸建站模板 https://www.mymoban.com/wordpress/7.html

【2024 信息素养大赛c++模拟题】算法创意实践挑战赛(基于 C++)

一、 比赛简介 国务院发布《国务院关于印发新一代人工智能发展规划的通 知》&#xff0c;明确实施全民智能教育项目。教育部印发《2019 年教育信息 化和网络安全工作要点》&#xff0c;推动在中小学阶段设置人工智能相关课 程&#xff0c;逐步推广编程教育。本赛项是在贯彻…

“视频号小店”会被“抖音小店”取代,成为下一个电商风口吗?

大家好&#xff0c;我是电商花花。 随着越来越多的人来视频号上开店卖货&#xff0c;做直播带货&#xff0c;让视频号小店逐渐成为下一个红利平台。 最近&#xff0c;很多人都说视频号小店可能会取代抖音小店&#xff0c;成为下一个电商风口&#xff0c;那么视频号小店真的能…

Java | Leetcode Java题解之第7题整数反转

题目&#xff1a; 题解&#xff1a; class Solution {public int reverse(int x) {int rev 0;while (x ! 0) {if (rev < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {return 0;}int digit x % 10;x / 10;rev rev * 10 digit;}return rev;} }

事件循环(2024 面试题)

答题大纲 先说基本知识点&#xff0c;宏任务、微任务有哪些说事件循环机制过程&#xff0c;边说边画图出来说async/await执行顺序注意&#xff0c;可以把 chrome 的优化&#xff0c;做法其实是违法了规范的&#xff0c;V8 团队的PR这些自信点说出来&#xff0c;显得你很好学&a…

Mybatis plue(二) 核心功能

核心功能 P5 条件构造器 mybatisplus支持各种复杂的where条件&#xff0c;可以满足日常开发的所有需求 wrapper就是条件构造器,wrapper就是顶层的&#xff0c; 示例&#xff1a; 查询出名字带0&#xff0c;存款大于等于1000的人的id,username,info,balance字段 Testvoid te…

L2-035 完全二叉树的层序遍历(完全二叉树+后序推出层序)

本题链接&#xff1a;PTA | 程序设计类实验辅助教学平台 题目&#xff1a; 样例&#xff1a; 输入 8 91 71 2 34 10 15 55 18 输出 18 34 55 71 2 10 15 91 思路&#xff1a; 根据题意&#xff0c;这是个完全二叉树 后序遍历&#xff0c;要求推出层序遍历。 根据完全二叉树…