[79]单词搜索

[79]单词搜索

题目地址:https://leetcode.cn/problems/word-search/?favorite=2cktkvj
在这里插入图片描述

思路分析:

1、解题思路
在这里插入图片描述

/**
 * @param {character[][]} board
 * @param {string} word
 * @return {boolean}
 递归+回溯
 */
var exist = function(board, word) {
    
    
    const m = board.length;
    const n = board[0].length;
    // 当前元素有没有作为路径中(正确路径)的一环被使用
    const used = new Array(m).fill(false).map(() => new Array(n).fill(false));

    // 递归函数: row, col, k:当前元素所在位置,以及要寻找的字符串的目标位置
    const canFind = (row, col, k) => {
    
    
        // 递归终止条件
        //(2)目标字符串被全部找到了
        if(k === word.length) {
    
    
            return true;
        }
        //(3)当前元素越界啦
        if(row < 0 || row >= m || col < 0 || col >= n) {
    
    
            return false;
        }
        //(1)当前元素不是字符串路径中的元素, 当前点已经被使用过
        if(used[row][col] || board[row][col] !== word[k]) {
    
    
            return false;
        }
     
        // 说明当前元素没有越界,路径未全部找出,当前元素也是路径中的一个,可以被使用,作为路径中的一环。
        used[row][col] = true; // 当前元素被使用,并以该元素,进行查找判断是不是在正确路径上。
        // 通过判断该元素上下左右是否也有在路径上的元素能被找到
        let correctPath = canFind(row + 1, col, k+1)
            || canFind(row - 1, col, k+1)
            || canFind(row, col + 1, k+1)
            || canFind(row, col - 1, k+1);

        if(correctPath) {
    
    
            return true;
        }
        // 上下左右没有路径上的元素被找到,说明该元素虽然是路径上出现的元素,但不是正确路径上可以被使用的元素,所以需要将该元素被使用状态置未false:没有被正确路径所使用
        used[row][col] = false;
        return false;
    }

    // 外层遍历
    for(let i = 0; i < m; i++) {
    
    
        for(let j = 0; j < n; j++) {
    
    
            // 找到目标字符串中第一个元素,以该元素为路径起点进行查找。
            if(board[i][j] === word[0] && canFind(i, j, 0)) {
    
    
                return true;
            }
        }
    }
    return false;
};

猜你喜欢

转载自blog.csdn.net/qq_39207948/article/details/127935247
今日推荐