单词是否存在网格

本文最后更新于: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 协议 ,转载请注明出处!