剑指Offer——矩阵中的路径(JS实现)

简介: 剑指Offer——矩阵中的路径(JS实现)

题目描述

image.png

image.png

解题思路

  • 本题采用的DFS + 剪枝
  • 首先通过循环遍历二维数组,找到第一个和字符串的元素相同的元素,然后使用DFS开始遍历,知道遍历到字符串的最后一个元素都相同,则返回true,反之则返回false
  • 剪枝的作用在于在进行DFS遍历的时候,防止重复遍历

解题代码

var exist = function(board, word) {
    // ! 本题采用深度优先搜索DFS的算法思想
    // 记录二维数组的行数
    const row = board.length;
    // 记录二维数组的列数
    const col = board[0].length;
    // 定义核心DFS函数
    function dfs(i,j,board,index) {
        // 如果下标越界或者元素不匹配则返回false
        if (i < 0 || i >= row || j < 0 || j >= col || board[i][j] !== word[index]) return false;
        // 经过上面的if语句,如果index走到最后一个下标,说明包含这个字符串,返回true
        if (index === word.length - 1) return true;
        // 因为前面的是起点,我们还要遍历起点之后的元素,先记录下当前元素
        let temp = board[i][j];
        // 让当前元素这个位置不能被重复参与
        board[i][j] = '*';
        // 定义一个元素的上下左右是否符合
        let res = dfs(i-1,j,board,index+1) || dfs(i+1,j,board,index + 1) || dfs(i,j-1,board,index+1) || dfs(i,j+1,board,index+1);
        // 恢复元素的原本值,让后续的遍历可以使用
        board[i][j] = temp;
        // 返回res
        return res;
    }
    // 从board中寻找第一个和word[0]相同的元素,开始遍历
    for (let i = 0; i < row; i++) {
        for (let j = 0; j < col; j++) {
            // 只要能遍历到一个true,则返回true
            if (dfs(i,j,board,0)) return true;
        }
    }
    // 如果遍历完,都没有true,说明没有,则返回false
    return false;
};

总结(本题给我们的启示思路)

  • 启示一:学会使用DFS + 剪枝的方法遍历二维数组中的有关路径
相关文章
|
3月前
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
3月前
|
JavaScript
Vue3基础(19)___vite.config.js中配置路径别名
本文介绍了如何在Vue 3的Vite配置文件`vite.config.js`中设置路径别名,以及如何在页面中使用这些别名导入模块。
148 0
Vue3基础(19)___vite.config.js中配置路径别名
|
4月前
关于three.js中的矩阵更新
关于three.js中的矩阵更新
62 1
|
4月前
|
存储 JavaScript vr&ar
three.js中的矩阵变换(模型视图投影变换)
three.js中的矩阵变换(模型视图投影变换)
92 1
若依修改,改若依首页,若依修改了路由不出现如何解决,修改路由必须在permission.js中的白名单添加新的路由,修改了路由,不出现,解决方法是在白名单中添加对应的路径:
若依修改,改若依首页,若依修改了路由不出现如何解决,修改路由必须在permission.js中的白名单添加新的路由,修改了路由,不出现,解决方法是在白名单中添加对应的路径:
若依修改-------控制若依重定向的路径,控制路径重定向的写法路径在,在permission.js文件中控制重定向
若依修改-------控制若依重定向的路径,控制路径重定向的写法路径在,在permission.js文件中控制重定向
|
5月前
|
前端开发 JavaScript Linux
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
若依修改之后,无法访问前端项目如何解决,只能访问后端的接口,我的接口8083,端不显示咋解决?在vue.config.js文件中的映射路径要跟后端匹配,到软件商店里找到Ngnix配置代理,设80不用加
|
7月前
|
JavaScript 前端开发
node.js中path模块-路径处理,语法讲解
node.js中path模块-路径处理,语法讲解
|
7月前
|
JavaScript 前端开发
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
|
7月前
|
JavaScript
【vue】 vue2 修改网页标题和图标logo、全局路径、跨域vue.config.js
【vue】 vue2 修改网页标题和图标logo、全局路径、跨域vue.config.js
543 0