@@ -34,3 +34,43 @@ function dfs(board, x, y, dirs, word, start) {
34
34
35
35
return false ;
36
36
}
37
+
38
+ // another
39
+
40
+ /**
41
+ * @param {character[][] } board
42
+ * @param {string } word
43
+ * @return {boolean }
44
+ */
45
+ const exist = function ( board , word ) {
46
+ if ( ! word || ! board || board . length === 0 ) return false
47
+ const dirs = [ [ - 1 , 0 ] , [ 1 , 0 ] , [ 0 , - 1 ] , [ 0 , 1 ] ]
48
+ for ( let row = 0 ; row < board . length ; row ++ ) {
49
+ for ( let col = 0 ; col < board [ row ] . length ; col ++ ) {
50
+ if ( searchWord ( board , row , col , word , 0 , dirs ) ) return true
51
+ }
52
+ }
53
+ return false
54
+ }
55
+
56
+ const searchWord = ( board , row , col , word , widx , dirs ) => {
57
+ if ( widx === word . length ) return true
58
+ if (
59
+ row < 0 ||
60
+ col < 0 ||
61
+ row === board . length ||
62
+ col === board [ 0 ] . length ||
63
+ board [ row ] [ col ] === null ||
64
+ board [ row ] [ col ] !== word [ widx ]
65
+ ) return false
66
+
67
+ const ch = board [ row ] [ col ]
68
+ board [ row ] [ col ] = null // mark visited
69
+
70
+ for ( let dir of dirs ) {
71
+ if ( searchWord ( board , row + dir [ 0 ] , col + dir [ 1 ] , word , widx + 1 , dirs ) ) {
72
+ return true
73
+ }
74
+ }
75
+ board [ row ] [ col ] = ch // recover
76
+ }
0 commit comments