当前位置: 首页 > news >正文

Leetcode Hot 100 79.单词搜索

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.dtcms.com/a/77372.html

相关文章:

  • 【spring对bean Singleton和Prototype的管理流程】
  • 英伟达GTC 2025大会产品全景剖析与未来路线深度洞察分析
  • 小程序开发中的安全问题及防护措施
  • 蓝桥与力扣刷题(蓝桥 组队)
  • E1-相亲派对(组合)
  • 【AI News | 20250319】每日AI进展
  • @Resource和@Autowire
  • Java 中 LinkedList 的底层数据结构及相关分析
  • 【源码阅读】多个函数抽象为类(实现各种类型文件转为PDF)
  • UE4学习笔记 FPS游戏制作6 添加枪口特效
  • 详细解析GetOpenFileName()
  • Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析
  • 区块链技术驱动金融第一章 —— 走进区块链的基石:密码学与加密货币
  • 性能测试过程实时监控分析
  • 虚幻基础:动作系统3
  • 基于Arduino控制的温室蔬菜园环境监控系统(论文+源码)
  • python-56-基于Vue和Flask进行前后端分离的项目开发示例实战
  • FPGA学习(二)——基于DE2-115开发板的LED流水灯设计
  • 构建下一代AI Agent:自动化开发与行业落地全解析
  • SpringBoot3+Vue3实战(Vue3快速开发登录注册页面并对接后端接口)(4)
  • <table>内有两行<tr>,第一行设定高度为60,剩余第二行,和右侧元素高度补齐。
  • Linux 锁、线程同步
  • Elasticsearch text字段检索方法
  • 各种医学方面大模型总结——自用
  • 前端调试实战指南:从入门到高阶的完整解决方案
  • 【Triton 教程】triton_language.tensor
  • 【AVRCP】服务发现互操作性:CT 与 TG 的 SDP 协议契约解析
  • TDE透明加密技术:免改造实现华为云ECS中数据库和文件加密存储
  • Cool Request:可以统计任意方法耗时
  • dpkg-architecture命令详解