单词是否存在网格
本文最后更新于:12 天前
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board =[
[‘A’,’B’,’C’,’E’],
[‘S’,’F’,’C’,’S’],
[‘A’,’D’,’E’,’E’]
]
给定 word = “ABCCED”, 返回 true
给定 word = “SEE”, 返回 true
给定 word = “ABCB”, 返回 false`
const getWord = function (board, word) {
let vistList = [],
xlen = board.length,
ylen = board[0].length,
result = false;
let dfs = (x, y, n) => {
if (result) {
return;
}
if (board[x][y] === word[n]) {
let tmp = board[x][y];
board[x][y] = null;
if (n == word.length - 1) {
result = true;
return;
}
check(x + 1, y) ? dfs(x + 1, y, n + 1) : null;
check(x - 1, y) ? dfs(x - 1, y, n + 1) : null;
check(x, y + 1) ? dfs(x, y + 1, n + 1) : null;
check(x, y - 1) ? dfs(x, y - 1, n + 1) : null;
board[x][y] = tmp;
} else {
return;
}
};
let check = (x, y) => {
return x < xlen && x >= 0 && y >= 0 && y < ylen && !result;
};
for (var x = 0; x < board.length; x++) {
for (var y = 0; y < board[x].length; y++) {
if (result) {
break;
}
board[x][y] == word[0] && !result ? dfs(x, y, 0) : null;
}
}
return result;
};
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!