File tree Expand file tree Collapse file tree 1 file changed +70
-0
lines changed Expand file tree Collapse file tree 1 file changed +70
-0
lines changed Original file line number Diff line number Diff line change
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ // Depth First Search (DFS)
3
+ // Time: O(m*n)
4
+ // Space: O(m*n)
5
+ // You can implement either Depth First Search (DFS) or Breadth First Search
6
+ // (BFS). The only noticeable impact is the performance cost of the BFS queue
7
+ // is higher than the DFS call stack.
8
+ //////////////////////////////////////////////////////////////////////////////
9
+
10
+ /**
11
+ * @param {character[][] } board
12
+ * @return {void } Do not return anything, modify board in-place instead.
13
+ */
14
+ function solve ( board ) {
15
+
16
+ const rowLen = board . length ;
17
+ const colLen = board [ 0 ] . length ;
18
+ const lastRow = rowLen - 1 ;
19
+ const lastCol = colLen - 1 ;
20
+
21
+ for ( let r = 0 ; r < rowLen ; ++ r ) {
22
+ markSeen ( r , 0 ) ;
23
+ markSeen ( r , lastCol ) ;
24
+ }
25
+ for ( let c = 1 ; c < lastCol ; ++ c ) {
26
+ markSeen ( 0 , c ) ;
27
+ markSeen ( lastRow , c ) ;
28
+ }
29
+
30
+ for ( let r = 0 ; r < rowLen ; ++ r ) {
31
+ for ( let c = 0 ; c < colLen ; ++ c ) {
32
+ switch ( board [ r ] [ c ] ) {
33
+ case 'O' :
34
+ board [ r ] [ c ] = 'X' ;
35
+ break ;
36
+ case 'A' :
37
+ board [ r ] [ c ] = 'O' ;
38
+ break ;
39
+ }
40
+ }
41
+ }
42
+
43
+ /**
44
+ * @param {number } r
45
+ * @param {number } c
46
+ * @return {void }
47
+ */
48
+ function markSeen ( r , c ) {
49
+
50
+ if ( ! inBounds ( r , c ) || board [ r ] [ c ] !== 'O' ) {
51
+ return ;
52
+ }
53
+
54
+ board [ r ] [ c ] = 'A' ;
55
+
56
+ markSeen ( r - 1 , c ) ;
57
+ markSeen ( r + 1 , c ) ;
58
+ markSeen ( r , c - 1 ) ;
59
+ markSeen ( r , c + 1 ) ;
60
+ }
61
+
62
+ /**
63
+ * @param {number } r
64
+ * @param {number } c
65
+ * @return {boolean }
66
+ */
67
+ function inBounds ( r , c ) {
68
+ return r >= 0 && c >= 0 && r < rowLen && c < colLen ;
69
+ }
70
+ }
You can’t perform that action at this time.
0 commit comments