1 /**
2 * @param {character[][]} board
3 * @param {string} word
4 * @return {boolean}
5 */
6 var exist = function (board, word) {
7 const yLen = board.length
8 const xLen = board[0].length
9 const wLen = word.length
10 const matrix = Array.from(Array(yLen), () => new Array(xLen).fill(true))
11 //方向 左、右、上、下
12 const direction = [
13 { dirX: 1, dirY: 0 },
14 { dirX: -1, dirY: 0 },
15 { dirX: 0, dirY: 1 },
16 { dirX: 0, dirY: -1 },
17 ]
18 const inArea = (x, y) => {
19 return x >= 0 && x < xLen && y >= 0 && y < yLen && matrix[y][x]
20 }
21 const isAns = (x, y, index) => {
22 if (board[y][x] !== word[index]) {
23 return false
24 }
25 index++;
26 if (index === wLen) {
27 return true
28 }
29 matrix[y][x] = false;
30 for (let i = 0; i < direction.length; i++) {
31 const newX = x + direction[i].dirX
32 const newY = y + direction[i].dirY
33 if (inArea(newX, newY) && isAns(newX, newY, index)) {
34 return true
35 }
36 }
37 index--;
38 matrix[y][x] = true;
39 return false;
40 }
41 for (let x = 0; x < xLen; x++) {
42 for (let y = 0; y < yLen; y++) {
43 if (isAns(x, y, 0)) {
44 return true;
45 }
46 }
47 }
48 return false;
49 };