刷题|剑指 Offer 12. 矩阵中的路径_JavaScript

题目描述

剑指 Offer 12. 矩阵中的路径
在这里插入图片描述

知识点

深度优先搜索(DFS)

解题思路

  1. index表示word的索引,看已经匹配多少字符了,终止条件为index=word.length-1
  2. 遍历搜索第一个字母的位置,确定在第几行,第几列,即i=?,j=?
  3. 根据ij进行递归遍历, 若board[i][j] !== word[index], return false
    注意:同一个单元格内的字母不允许被重复利用:所以在搜索的过程中要把已经使用过的字符变为空,即board[i][j]='' ,当四个方向遍历完之后,再恢复

代码实现

/**
 * @param {character[][]} board
 * @param {string} word
 * @return {boolean}
 */
var exist = function(board, word) {
    const [m, n] = [board.length, board[0].length];

    const dfs = (i, j, index) => {
        if (i<0 || i>=m || j <0 || j >=n || board[i][j] !== word[index]) return false; // 边界条件:i和j不能越界 + 字符没匹配上
        if (index === word.length-1) return true;  // 终止条件:若成立,表示搜索已经完成;

        const temp = board[i][j]; // 保存当前字符
        board[i][j]='';    // 设置为空

        const res = (
            dfs(i-1, j, index+1) ||
            dfs(i+1, j, index+1) ||
            dfs(i, j-1, index+1) ||
            dfs(i, j+1, index+1)
        );

        board[i][j] = temp;  // 恢复当前字符

        return res;
    };

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

    return false;
};

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值