当前位置: 首页 > Web前端 > JavaScript

[Leetcode346-700]79.WordSearch[Medium][BacktrackingDeepSearchJavaScriptVersion]

时间:2023-03-27 17:48:26 JavaScript

[Leetcode346/700]79.WordSearch[Medium]BacktrackingDeepSearchJavaScriptVersion1.Topicn二维字符网格板和一个字符串字字。如果单词存在于网格中,则返回真;否则,返回false。单词必须按字母顺序排列,通过相邻单元格中的字母,其中“相邻”单元格是水平或垂直相邻的单元格。同一单元格中的字母不允许重复使用。示例1:输入:board=[["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]],word="ABCCED"输出:true示例2:输入:board=[["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]],word="SEE"输出:true示例3:输入:board=[["A","B","C","E"],["S","F","C","S"],["A","D","E","e"]],word="ABCB"output:false提示:m==board.lengthn=board[i].length1<=m,n<=61<=word.length<=15boardandword只由大小写英文字母组成2解题思路1.遍历棋盘所有元素,找到word的第一个相同元素,并标记,进入递归寻找下一个第二个字符,然后是第三个字母。如果没有找到,返回false;在设定的边界内进行回溯搜索,即上下左右搜索下一个字符。如果找到,进入新的递归,如果没有找到,直接返回false;三、解题注意事项1、及时标记角色的状态,是否被访问过;2、如果最后所有的字符串都被截取了,说明找到了匹配的答案,直接返回true;4.解题代码/***@param{character[][]}board*@param{string}word*@return{boolean}*/varexist=function(board,word){letborder=[[0,1],[0,-1],[1,0],[-1,0]],//定义四个方向col=board.length,//行数row=board[0].length,//标记的列数=[...Array(col)].map(v=>Array(row).fill());//空行矩阵,用于记录已经访问过//空数组直接返回falseif(!col)returnfalse;letbackTracing=(i,j,markeds,boards,words)=>{//截取所有字符,说明已经找到if(!words.length){returntrue;}for(letp=0;p=0&&curi=0&&curj