【脚趾 offer 12】 矩阵中的路径

简介: 【脚趾 offer 12】 矩阵中的路径

前言

数据结构与算法属于开发人员的内功,不管前端技术怎么变,框架怎么更新,版本怎么迭代,它终究是不变的内容。 始终记得在参加字节青训营的时候,月影老师说过的一句话,不要问前端学不学算法。计算机学科的每一位都有必要了解算法,有写出高质量代码的潜意识

一、题目描述 剑指 Offer 12. 矩阵中的路径

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。  

例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。

image.png

示例 1:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true

示例 2:

输入:board = [["a","b"],["c","d"]], word = "abcd"
输出:false

提示:

  • 1 <= board.length <= 200
  • 1 <= board[i].length <= 200

二、问题思路

明确目标,这种寻找路径的题很明显就是一到不断去探索的过程,有很多种路径组合,只需要有一个满足就可以直接返回。 这种不断需要探索路径问题,一般我们首先想到的就是动态规划问题。 如果用动态规划来做的话就要明确好几个要点:

  • DFS深度搜索,明确终止条件
  • 不符合条件的进行枝剪

三、AC代码

var exist = function(board, word) {
   const m = board.length
   const n = board[0].length
   const dfs = (x,y,index)=>{
       if(x<0||x>=m||y<0||y>=n||board[x][y]!=word[index]) return false // 递归终止条件
       if(index==word.length-1) return true
       // 将当前经过的路径设置为空,避免重复
       const temp = board[x][y]
       board[x][y] = ''
       const res = ( // 向四个方向探索
           dfs(x-1,y,index+1) ||
           dfs(x,y-1,index+1) ||
           dfs(x+1,y,index+1)||
           dfs(x,y+1,index+1) 
       )
       board [x][y] = temp
       return res
   }
   for(let i=0;i<m;i++){
       for(let j=0;j<n;j++){
           if(dfs(i,j,0)) return true // 找到一个就能返回true
       }
   }
   return false
};

总结

好了,本篇脚趾offer 矩阵中的路径到这里就结束了,我是邵小白,一个在前端领域摸爬滚打的大三学生,欢迎👍评论。 借用鱼佬的一句话:不管菜不菜,但是热爱!


相关文章
|
数据采集 自然语言处理 搜索推荐
图文详解 DFS 和 BFS | 算法必看系列知识二十四
深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在高频面试题中。
36300 6
图文详解 DFS 和 BFS | 算法必看系列知识二十四
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
265 4
|
机器学习/深度学习 人工智能 算法
深度学习基础:从零开始的入门课
【8月更文挑战第21天】通过本文,我们简要介绍了深度学习的基本概念、基础框架以及入门实践。然而,深度学习是一个博大精深的领域,需要不断的学习和实践才能掌握其精髓。建议你在学习过程中,结合具体项目,通过解决实际问题来加深对理论知识的理解。同时,关注最新的研究成果和技术动态,保持对新技术的好奇心和学习热情,相信你会在深度学习的道路上越走越远。
|
机器学习/深度学习 存储 人工智能
一文搞懂 Transformer 工作原理 !!
一文搞懂 Transformer 工作原理 !!
664 0
|
Linux API
通用时钟框架 【ChatGPT】
通用时钟框架 【ChatGPT】
|
分布式计算 资源调度 Java
map-reduce中的组件
map-reduce中的组件
224 0
|
Java Python
【LeetCode每日一题】剑指 Offer 12. 矩阵中的路径(持续更新)
【LeetCode每日一题】剑指 Offer 12. 矩阵中的路径(持续更新)
216 0
【LeetCode每日一题】剑指 Offer 12. 矩阵中的路径(持续更新)
LeetCode 372. Super Pow
你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
142 0
LeetCode 372. Super Pow
|
机器学习/深度学习 存储 算法
深度学习相关概念:过拟合与欠拟合
是指学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测的很好,但对未知数据预测得很差的现象。这种情况下模型可能只是记住了训练集数据,而不是学习到了数据特征。
423 0
|
索引
【LeetCode剑指offer12】矩阵中的路径(dfs回溯)
递归参数: 当前字符在矩阵 grid 中的行索引 i 和列索引 j ,当前目标字符(匹配的)在目标字符串 word 中的索引 k 。
201 0
【LeetCode剑指offer12】矩阵中的路径(dfs回溯)