File tree Expand file tree Collapse file tree 4 files changed +91
-0
lines changed Expand file tree Collapse file tree 4 files changed +91
-0
lines changed Original file line number Diff line number Diff line change 1+ # 社区看到的优解
2+
3+ 其实这题本身是我想复杂了,我是一个个格子去遍历,然后再上下左右去扩展延伸。
4+
5+ 但是其实只需要遍历四个边界上的节点,遇到 O 的边界点才开始蔓延遍历,并且把遍历到的节点都标记为 M(防止重复遍历)
6+
7+ 最后再一次性遍历整个二维数组,遇到 M 的标记都转为 O(因为是从边界蔓延的,一定是不符合 X 的条件的)。
8+
9+ 这样遍历所走的路就会少很多。
10+
11+ ``` js
12+ var solve = function (board ) {
13+ if (board .length == 0 ) return null ;
14+
15+ for (var y = 0 ; y < board .length ; y++ ) {
16+ for (var x = 0 ; x < board[0 ].length ; x++ ) {
17+ if (board[y][x] == " O" && (y == 0 || y == board .length - 1 || x == 0 || x == board[0 ].length - 1 )) {
18+ dfs (board, y, x);
19+ }
20+ }
21+ }
22+
23+ for (var y = 0 ; y < board .length ; y++ ) {
24+ for (var x = 0 ; x < board[0 ].length ; x++ ) {
25+ if (board[y][x] == " W" ) {
26+ board[y][x] = " O" ;
27+ } else {
28+ board[y][x] = " X" ;
29+ }
30+ }
31+ }
32+
33+ return board;
34+ };
35+
36+ function dfs (board , y , x ) {
37+ if (y < 0 || x < 0 || y >= board .length || x >= board[0 ].length || board[y][x] == " X" || board[y][x] == " W" ) {
38+ return ;
39+ }
40+ board[y][x] = " W" ;
41+ dfs (board, y + 1 , x);
42+ dfs (board, y - 1 , x);
43+ dfs (board, y, x + 1 );
44+ dfs (board, y, x - 1 );
45+ return ;
46+ }
47+ ```
File renamed without changes.
Original file line number Diff line number Diff line change 1+ var solve = function ( board ) {
2+ if ( board . length == 0 ) return null ;
3+
4+ for ( var y = 0 ; y < board . length ; y ++ ) {
5+ for ( var x = 0 ; x < board [ 0 ] . length ; x ++ ) {
6+ if ( board [ y ] [ x ] == "O" && ( y == 0 || y == board . length - 1 || x == 0 || x == board [ 0 ] . length - 1 ) ) {
7+ dfs ( board , y , x ) ;
8+ }
9+ }
10+ }
11+
12+ for ( var y = 0 ; y < board . length ; y ++ ) {
13+ for ( var x = 0 ; x < board [ 0 ] . length ; x ++ ) {
14+ if ( board [ y ] [ x ] == "W" ) {
15+ board [ y ] [ x ] = "O" ;
16+ } else {
17+ board [ y ] [ x ] = "X" ;
18+ }
19+ }
20+ }
21+
22+ return board ;
23+ } ;
24+
25+ function dfs ( board , y , x ) {
26+ if ( y < 0 || x < 0 || y >= board . length || x >= board [ 0 ] . length || board [ y ] [ x ] == "X" || board [ y ] [ x ] == "W" ) {
27+ return ;
28+ }
29+ board [ y ] [ x ] = "W" ;
30+ dfs ( board , y + 1 , x ) ;
31+ dfs ( board , y - 1 , x ) ;
32+ dfs ( board , y , x + 1 ) ;
33+ dfs ( board , y , x - 1 ) ;
34+ return ;
35+ }
36+
37+ console . log (
38+ solve ( [
39+ [ "X" , "X" , "X" , "X" ] ,
40+ [ "X" , "O" , "O" , "X" ] ,
41+ [ "X" , "X" , "O" , "X" ] ,
42+ [ "X" , "O" , "X" , "X" ] ,
43+ ] )
44+ ) ;
File renamed without changes.
You can’t perform that action at this time.
0 commit comments