递归回溯算法:79. 单词搜索(leetcode)

77 阅读1分钟

题目:

image.png

 /**
         * @param {character[][]} board
         * @param {string} word
         * @return {boolean}
         */
        var exist = function (board, word) {
            const m = board.length;
            const n = board[0].length;
            let step = 1;
            for (let i = 0; i < m; i++) {
                for (let j = 0; j < n; j++) {
                    if (findPoint(i, j, board, word, step)) return true
                }
            }
            return false
        };
        function findPoint(i, j, board, word, step) {
            if (i < 0 || i > board.length - 1 || j < 0 || j > board[0].length - 1 || board[i][j] !== word[step - 1]) return
            if (step >= word.length) return true
            const orgin = board[i][j];
            // 这里只是为了标记走过的位置
            board[i][j] = step;
            step++;
            const pointList=[[0,-1],[-1,0],[0,1],[1,0]]
            const flag= pointList.some(([addX,addY])=>{
                if(findPoint(i+addX,j+addY,board, word, step)){
                    return true
                }
            })
            if(flag) return true
            board[i][j] = orgin;
        }

整体思路:遍历整个二维数组,匹配单词首字符,步长加1,则开始递归上下左右节点,直到步长等于单词字母长度即找到该单词。 递归回溯的点:边界值,边界值是否等于当前回溯哦单词的值(board[i][j] !== word[step - 1])