Leetcode Hot 100 79.单词搜索

news/2025/3/21 1:48:32/

1.题目

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

2.代码及解析

这个就涉及dfs了 和前面的棋盘那个差不多 我的思路对了一半 用了dfs+回溯 但是我忘了写回溯

一开始一直不通过 用visit来代表是否遍历过

class Solution {

    bool ans;

    bool dfs(vector<vector<char>>& board, int i, int j,vector<vector<bool>>&visited,string word,int index) {

        if(board.size()*board[0].size()< word.size()){

            return false;

        }

        if (i ==board.size() || i < 0) {

            return false;

        }

        if (j ==board[0].size() || j < 0) {

            return false;

        }

        if(index==word.size()){

            return true;

        }

        if (board[i][j] != word[index]|| visited[i][j]){

            return false;

        }

            visited[i][j]=true;

            bool ans=dfs(board, i + 1, j,visited,word,index+1)||dfs(board, i - 1, j,visited,word,index+1)||dfs(board, i, j + 1,visited,word,index+1)||dfs(board, i, j - 1,visited,word,index+1);

            visited[i][j]=false;

            return ans;

    }

public:

    bool exist(vector<vector<char>>& board, string word) {

        bool res;

        int m = board.size();    // 行数

        int n = board[0].size(); // 列数

        if(board.size()==1&&board[0][0]==word[0]&&word.size()==1){

            return true;

        }

        // 初始化 visited 数组,大小为 m x n,初始值为 false

        vector<vector<bool>> visited(m, vector<bool>(n, false));

        for(int i=0;i<board.size();i++){

            for(int j=0;j<board[0].size();j++){

                if(dfs(board,i,j,visited,word,0)) return true;

            }

        }

        return false;

    }

};


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

相关文章

荣耀手机怎么录制屏幕?屏幕录制后为视频加水印更有“安全感”

在数字时代&#xff0c;屏幕录制已经成为记录和分享信息的重要方式之一。无论是记录游戏的高光时刻&#xff0c;还是制作教学视频&#xff0c;亦或是保存重要的线上会议内容&#xff0c;屏幕录制都能轻松搞定。 荣耀手机作为一款功能强大的设备&#xff0c;自然也提供了便捷的…

【华三】路由器交换机忘记登入密码或super密码的重启操作

【华三】路由器交换机忘记登入密码或super密码的重启操作 背景步骤跳过认证设备&#xff1a;路由器重启设备翻译说明具体操作 跳过当前系统配置重启设备具体操作 背景 当console口的密码忘记&#xff0c;或者说本地用户的密码忘记&#xff0c;其实这时候是登入不了路由器的&am…

【数据结构面试篇】

数据结构有哪些分类&#xff1f;它们各自的使用场景是什么&#xff1f; 数据结构是计算机存储和组织数据的方式&#xff0c;合理选择数据结构能显著提升程序效率。以下是主要分类、特点及使用场景的总结&#xff1a; 一、线性结构 1. 数组&#xff08;Array&#xff09; 特点…

教材征订管理系统基于Spring Boot-SSM

‌ 目录 ‌摘要‌&#xff1a; ‌一、绪论‌&#xff1a; ‌二、国内外研究现状‌&#xff1a; ‌三、研究目的与内容‌&#xff1a; ‌四、详细设计‌&#xff1a; ‌4.1系统架构设计‌&#xff1a; ‌4.2数据库设计‌&#xff1a; ‌五、功能模块设计‌&#xff1a;…

nacos安装,服务注册,服务发现,远程调用3个方法

安装 点版本下载页面 服务注册 每个微服务都配置nacos的地址&#xff0c;都要知道 服务发现 2个是知道了解 远程调用基本实现 远程调用方法2&#xff0c;负载均衡API测试 远程调用方法3&#xff0c;注解 负载均衡的远程调用&#xff0c; 总结 面试题

oracle事务的组成

1)数据库事务由以下的部分组成: 一个或多个DML 语句 ; 一个 DDL(Data Definition Language – 数据定义语言) 语句&#xff1b; 一个 DCL(Data Control Language – 数据控制语言)语句&#xff1b; 2)事务的执行开始&#xff1a; 以第一个 DML 语句的执行作为开始 &#xff0c;…

浏览器性能优化工具之DevTools

作为一名浏览器内核开发工程师&#xff0c;深入理解浏览器开发者工具&#xff08;DevTools&#xff09;的使用方法及其背后的原理&#xff0c;对于调试和优化浏览器性能至关重要。以下是对 DevTools 的使用方法及其界面元素原理的介绍&#xff1a; 一、Chrome DevTools 的使用…

C++20 的 `std::remove_cvref`:简化类型处理的利器

文章目录 1. std::remove_cvref 是什么&#xff1f;2. 示例代码3. 为什么需要 std::remove_cvref&#xff1f;4. 实现原理5. 使用场景6. 注意事项7. 总结 在 C20 中&#xff0c;标准库引入了许多新特性&#xff0c;其中 std::remove_cvref 是一个非常实用的类型特征工具&#…