LeetCode讲解篇之79. 单词搜索

文章目录

题目描述

题解思路

我们遍历对矩阵中的每个点,对每个点采用深度优先搜索,检查是否能以当前点做为开头来匹配word

我们使用一个与矩阵相同规格的二维数组表示矩阵中对应的点是否被访问过,防止重复计算

题解代码

go 复制代码
func exist(board [][]byte, word string) bool {
    m, n := len(board), len(board[0])

	// 表示矩阵中i, j位置是否在一次搜索word的过程中被访问过
    used := make([][]bool, m)
    for i := 0; i < m; i++ {
        used[i] = make([]bool, n)
    }

	// 当前要匹配word哪一个字符的下标
    idx := 0

    var dfs func(i, j int) bool
    dfs = func(i, j int) bool {
    	// word所有字符已经找到
        if idx == len(word) {
            return true
        }
        // 越界、已经被访问过、当前矩阵中的字符不是word需要匹配的字符,这些情况表示从当前字符开始无法找到word[idx:]这个字符串
        if i < 0 || j < 0 || i >= m || j >= n || used[i][j] || board[i][j] != word[idx] {
            return false
        }

		// 继续搜索word[idx + 1:]
        idx++
        used[i][j] = true
        if dfs(i, j + 1) || dfs(i, j - 1) || dfs(i + 1, j) || dfs(i - 1, j) {
            return true
        }
        used[i][j] = false
        idx--

        return false
    }

    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ {
            if dfs(i, j) {
                return true
            }
        }
    }

    return false
}

题目链接

https://leetcode.cn/problems/word-search/description/

相关推荐
漂流瓶jz42 分钟前
UVA-1613 K度图的着色 题解答案代码 算法竞赛入门经典第二版
算法·深度优先·图论·贪心·aoapc·算法竞赛入门经典·uva
文丑颜不良啊1 小时前
LeetCode2921~2940题目解析
java·leetcode
Pniubi1 小时前
动态规划入门 ( - 力扣509斐波那契数)
算法·动态规划
吴长建先生重名了3 小时前
GitHub Actions部署报表系统踩坑记:幂等性与限
算法
贝壳6903 小时前
一个2026年2月才上传的库,凭什么敢碰2009年就有人写烂的题目
算法
文丑颜不良啊3 小时前
LeetCode2901~2920题目解析
java·leetcode
贝壳6904 小时前
同一道三亿位选型题,三个AI给了我三个答案,我把它们拉进同一台机器复跑
算法
Yuzhiyuxia4 小时前
【AI Agent面试系列】AI Agent实战设计
人工智能·面试·职场和发展
文丑颜不良啊5 小时前
LeetCode2861~2880题目解析
java·leetcode
青少儿编程课堂6 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛