LeetCode 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

解法

1.回溯法

解题思路

此题与LeetCode 200. 岛屿数量-CSDN博客问题有些类似,就是以每个点都作为起点深度优先遍历一遍,在遍历过程中要标记已读,并回溯,此问题只需要找到一个答案,于是找到答案立马返回。

cpp 复制代码
class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        const int DIRS[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
        int m = board.size(),n = board[0].size(),t = word.size();
        auto dfs = [&](this auto && dfs,int i,int j,int l){
            if(i < 0 || i >= m || j < 0 || j >= n || l > t || board[i][j] != word[l]) return false;
            if(l == t - 1) return true; //因为从0开始计数
            char temp = board[i][j];
            board[i][j] = '#';   //标记已读
            for(int x = 0;x < 4;x ++){
                if(dfs(i + DIRS[x][0],j + DIRS[x][1],l + 1)) return true;
            }
            board[i][j] = temp; //回溯
            return false;
        };
        
        for(int i = 0;i < m;i ++){
            for(int j = 0;j < n;j ++){
                if(dfs(i,j,0)) return true; //有一个起点满足条件,就要返回
            }
        }
        return false;
    }
};

时间复杂度O(M·N·4^L),空间复杂度O(L)(L为单词长度,也是递归深度,需要栈存储数据)

相关推荐
无限码力22 分钟前
华为非AI方向笔试真题【工厂落点最小加权路程】
算法·华为·华为非ai方向笔试真题·华为笔试真题·华为最新笔试真题·华为笔试题库
residual_fan27 分钟前
数据缺失填补算法之CUR-Estimator
算法·数据挖掘·数据分析
wabs66633 分钟前
关于二叉树【力扣107.二叉树的层序遍历II的思考】
数据结构·c++·算法·leetcode·二叉树·层序遍历
一切皆是因缘际会1 小时前
资源的适配
大数据·人工智能·算法
鲸能云1 小时前
【智慧能源】源储调售一体化架构与 EMS 滚动调度算法实践 —— 工商业光储收益提升 22% 的技术拆解
算法·架构·能源
双翌视觉1 小时前
曝光调不对,算法全白费:机器视觉的曝光三态解析
人工智能·算法·计算机视觉
ysu_03142 小时前
02-单链表完全指南
c语言·数据结构·算法·leetcode
生态学者2 小时前
香港理工大学Nature Communications:沿海塑料际古菌组特征及生态影响
大数据·人工智能·算法·r语言·微信公众平台
ly-272532 小时前
IEEE PDF eXpress终稿检测踩坑记录:PDF图片字体未嵌入与LaTeX参考文献编译异常解决方法
服务器·人工智能·算法
代码不停2 小时前
子序列问题
java·算法