当前位置: 首页 > 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;

    }

};

相关文章:

  • 【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)
  • 李峰已任上海青浦区委常委
  • 澳大利亚首例“漂绿”诉讼开庭:能源巨头因“碳中和”承诺遭起诉
  • 申论|空间更新结合“青银共生”,助力青年发展型城区建设
  • 张汝伦:康德和种族主义
  • 俄谈判代表团已抵达土耳其,谈判预计在莫斯科时间10时左右开始
  • 外企聊营商|威能集团:公平环境增“暖”意