Skip to content
On this page

79. 单词搜索

原题链接: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

提示:

- `m == board.length`

- `n = board[i].length`

- `1 <= m, n <= 6`

- `1 <= word.length <= 15`

- `board` 和 `word` 仅由大小写英文字母组成

**进阶:**你可以使用搜索剪枝的技术来优化解决方案,使其在 board 更大的情况下可以更快解决问题?

难度: Medium


题解代码

javascript
/**
 * @param {character[][]} board
 * @param {string} word
 * @return {boolean}
 */

const exist = (board, word) => {
    // 特殊条件处理
    if (board.length === 0) return false
    if (word.length === 0) return true

    const find = (i, j, idx) => {
        // 越界
        if (i >= row || i < 0) return false
        if (j >= col || j < 0) return false

        const letter = board[i][j]
        // 不匹配
        if (letter !== word[idx]) return false
        // 已经找到最后一个
        if (idx === word.length - 1) return true
        // 防止回找
        board[i][j] = null
        const ret = find(i - 1, j, idx + 1) ||
                    find(i + 1, j, idx + 1) || 
                    find(i, j + 1, idx + 1) ||
                    find(i, j - 1, idx + 1)
        board[i][j] = letter
        return ret
    }
    
    const row = board.length
    const col = board[0].length
    for (let i = 0; i < row; i++) {
        for (let j = 0; j < col; j++) {
            const ret = find(i, j, 0)
            if (ret) return true
        }
    }
    
    return false
}

技术文档集合