Leetcode Hot 100 79.单词搜索

种地  论坛元老 | 2025-3-20 06:45:09 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1048|帖子 1048|积分 3144

1.标题
79. 单词搜索
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例 1:


  1. <strong>输入:</strong>board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
  2. <strong>输出:</strong>true
复制代码
示例 2:


  1. <strong>输入:</strong>board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
  2. <strong>输出:</strong>true
复制代码
示例 3:


  1. <strong>输入:</strong>board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
  2. <strong>输出:</strong>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[j] != word[index]|| visited[j]){
            return false;
        }
            visited[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[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;
    }
};

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表