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

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.kler.cn/a/592920.html

相关文章:

  • 如何把master迁出的bug修改分支,合并、删除本地、删除远端
  • 前端小食堂 | Day17 - 前端安全の金钟罩
  • leetcode日记(100)填充每个节点的下一个右侧节点指针
  • Vue3中ts父子组件传值
  • CSGHub开源版本v1.5.0更新
  • Leetcode-100 回溯法-子集
  • 单元测试、系统测试、集成测试、回归测试的步骤、优点、缺点、注意点梳理说明
  • 【深度学习量化交易18】盘前盘后回调机制设计与实现——基于miniQMT的量化交易回测系统开发实记
  • Leetcode 刷题笔记1 单调栈part01
  • 瑞幸需要宇树科技
  • 使用hel-micro微服务实现在jsp项目中引入react组件
  • Jenkins自动化部署pigx项目的实践总结
  • DLMS电能表通讯协议学习笔记
  • 2025三掌柜赠书活动第八期:预训练语言模型:方法、实践与应用
  • 联核科技AGV无人叉车有哪些常见的安全防护措施?
  • Flutter小白零基础入门到高级项目实战全集
  • 解决uni-app授权弹框华为审核拒绝
  • vscode+wsl2+bear+clangd配置教程
  • 【Spark】查询优化中分区(Partitioning)和分桶(Bucketing)是什么关系?什么时候应当分区,什么时候应当分桶?
  • 【sgAutocomplete_v2】自定义组件:基于elementUI的el-input组件开发的搜索输入框(支持本地保存历史搜索关键词、后台获取匹配项)