欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 【LeetCode刷题记录】79. 单词搜索(JS解法)

【LeetCode刷题记录】79. 单词搜索(JS解法)

2025/2/28 13:27:41 来源:https://blog.csdn.net/C_greenbird/article/details/145887311  浏览:    关键词:【LeetCode刷题记录】79. 单词搜索(JS解法)

79. 单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 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”
输出:false

提示:
m == board.length
n = board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
board 和 word 仅由大小写英文字母组成

思路:

使用回溯法。首先需要确定起始位置,可能不止存在一个可能的起始位置,由于不能重复使用一个单元格内的字母,所以需要使用标记数组标记是否已使用:

// 使用 Array.from() 方法创建二维数组
// rows*cols 行*列
const twoDArray = Array.from({ length: rows }, () => Array(cols).fill(0));

再找到起始位置后,需要遍历其相邻位置字母看是否匹配,然后递归,取消标记回溯。当遍历的长度达到word单词长度时表示遍历结束。

代码:

/*** @param {character[][]} board* @param {string} word* @return {boolean}*/
var exist = function (board, word) {const m = board[0].length; // 列数const n = board.length;  // 行数// n*m二维数组const used = Array.from({ length: n }, () => Array(m).fill(false));// 相邻元素位置const x = [-1, 1, 0, 0];const y = [0, 0, -1, 1];// 记录与word首字母相同字母的起始位置for (let i = 0; i < n; i++) {for (let j = 0; j < m; j++) {if (board[i][j] === word[0]) {used[i][j] = true;if (backtracking(1, i, j)) {return true;}used[i][j] = false;}}}return false;function backtracking(index, posX, posY) {if (index === word.length) {return true;}for (let i = 0; i < 4; i++) {const newX = posX + x[i];const newY = posY + y[i];if (newX >= 0 && newX < n && newY >= 0 && newY < m) {if (board[newX][newY] === word[index] && used[newX][newY] === false) {used[newX][newY] = true;if (backtracking(index + 1, newX, newY)) {return true;}used[newX][newY] = false;}}}return false;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词